从Java6迁移到Java8后,绑定不匹配并阻止了访问

时间:2018-11-09 13:43:39

标签: java java-8 java-6 bnd access-rules

在将PDE项目转移到bndtools以及从java6转移到java8之后,我遇到了一个非常奇怪的错误。结构非常复杂,但是我敢肯定它可以在旧版本中使用。

该错误是在我尝试初始化新变量的一个类中:

GenericStorageItem<SharedItem> result;

这将导致以下错误:

Bound mismatch: The type SharedItem is not a valid substitute for the bounded parameter <T extends Serializable> of the type GenericStorageItem<T>

对象SharedItem的定义如下:

public abstract class SharedItem extends LSContent implements Storable

它扩展了如下所示的LSContent:

public abstract class LSContent implements PastContent

最后,PastContent包含对Serializable的引用:

public interface PastContent extends Serializable

拒绝绑定的类是GenericStorageItem:

public class GenericStorageItem<T extends Serializable> implements StorageItem

除此错误外,每次使用SharedItem都会收到以下警告

Discouraged access: The type 'SharedItem' is not API (restriction on required project 'the package where the class SharedItem comes from')

由于此警告,并且由于代码的这一部分确实起作用,所以我认为该问题与访问规则有关。我查看了“项目属性”,发现访问规则不鼓励使用:**在所有外部jar中。

在阅读this帖子之后,我尝试删除规则,但是由于某些原因,应用规则后又将其切换回原来的状态。

我希望你们中的某人对如何解决此问题有所了解。

0 个答案:

没有答案