Dai*_*run 8 java generics interface
我有
1)基本界面,
2)实现此接口的几个类,
3)和一个我想接受的泛型类,作为参数,任何实现类
我尝试过以下方法:
public class Foo extends Bar<? extends SomeInterface> {
public Foo(List<? extends SomeInterface> someInterfaceList) {
super(someInterfaceList);
}
...
}
Run Code Online (Sandbox Code Playgroud)
我收到错误No Wildcard Expected.在我的代码的其他地方,我有这样的陈述List<? extends SomeInterface>,我没有收到任何错误,为什么我在这里遇到问题?我该如何解决这个问题并仍能获得理想的结果?
我试过搜索'没有通配符预期'和'通知卡在课堂声明'无济于事.提前致谢!
听起来你想声明一个你将在别处引用的泛型类型参数.通配符仅在类型仅使用一次时才有意义,并且在为类声明泛型类型参数时这没有任何意义.
试试这个:
public class Foo<T extends SomeInterface> extends Bar<T> {
public Foo(List<T> someInterfaceList) {
super(someInterfaceList);
}
...
}
Run Code Online (Sandbox Code Playgroud)
在编写代码时,类的用户无法为其指定泛型类型参数Bar<>,因为Foo它本身不是泛型类型.
此外,如果这是可能的,那么泛型参数可能与泛型参数Bar<>不同List<>- 只要在SomeInterface那里实现的两种类型都不会出现这些定义的编译时问题,但可能有以后当您错误地认为两种类型必须相同时,这是一个更令人困惑的错误消息.
因此,声明泛型类型,一旦作为一个通用的参数传递给Foo类,然后使用该类型(T在我的例子),在其他地方是指那种类型,而不是接受,可能指的不是同一类型的一些新的泛型类型参数的.