在将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帖子之后,我尝试删除规则,但是由于某些原因,应用规则后又将其切换回原来的状态。
我希望你们中的某人对如何解决此问题有所了解。