我有几个泛型类:
public interface Data<E> {}
public interface Clonable<E extends Clonable<E>> {}
public interface NaturalNumberInterface extends Data<NaturalNumberInterface> {}
public class NaturalNumber implements NaturalNumberInterface {}
public interface SetInterface<E extends Data<E>> extends Clonable<SetInterface<E>> {}
public class Set<E extends Data<E>> implements SetInterface<E> {}
当我尝试创建Set
Set<NaturalNumber> s=new Set<NaturalNumber>();
编译器的新实例时说:NaturalNumber
不能有效替代类型<E extends Data<E>>
的类型参数Set<E>
也许您可以帮助我找到错误,因为我花了很长时间而没有找到解决方案。
最佳答案
我假设您的SetInterface
的定义方式与ListInterface
相同,并且Data
只是interface Data<T>
。SetInterface
的通用参数为F-bounded:E extends Data<E>
。在您当前的代码NaturalNumber
中,类型扩展为Data<NaturalNumberInterface>
。因此,如果E
是NaturalNumber
,则违反条件,因为它应该扩展更特定的类型Data<NaturalNumber>
。
您还应该对NaturalNumberInterface
使用F边界:
public interface NaturalNumberInterface<T extends NaturalNumberInterface<T>> extends Data<T>
public class NaturalNumber implements NaturalNumberInterface<NaturalNumber>
这样,它将起作用。