我不敢相信如果没有将类输入到冗余的2类类中,我就无法捕获P:
input
我是否真的需要将MyClass定义并实例化为public class MyClass<T extends List<P>> {
T getList(/**/){}
P getRandomElement(){ /**/ }
}
,无论如何都无法推断出来?
编辑:我的意思是我看到多余的必须定义MyClass<String,ArrayList<String>>
,因为那时我需要将它实例化为MyClass<P,T extends List<P>>
,并随身携带字符串。如果语言允许像
MyClass<String,ArrayList<String>>
或类似的东西,那将是很好的。这样,MyClass<L extends List<P>>
在执行MyClass<ArrayList<String>>
时会返回ArrayList<String>
,在执行getList()
时会返回String
。
答案 0 :(得分:5)
如果您确实必须从List
返回getList
的确切类型,那么您需要类型参数T
以及P
。
public class MyClass<P, T extends List<P>> {
通过这种方式,您可以MyClass<String, ArrayList<String>>
getList
方法返回ArrayList<String>
,getRandomElement
方法返回String
。
但是,通常不必知道List
的确切类型。通常情况下,如果您有List
,那么对于此类的用户而言,List
实际上是哪种类型并不重要。在这种情况下,您不需要类型参数T
,只需要P
。您可以将课程更改为:
public class MyClass<P> {
List<P> getList(/**/){}
P getRandomElement(){ /**/ }
}
然后,您可以MyClass<String>
getList
方法返回List<String>
,getRandomElement
方法返回String
。