Whi*_*cal 1 java generics types type-inference java-8
我不敢相信如果没有将类输入到冗余的2类类中,我就无法捕获P:
public class MyClass<T extends List<P>> {
T getList(/**/){}
P getRandomElement(){ /**/ }
}
Run Code Online (Sandbox Code Playgroud)
我是否真的需要定义和实例化MyClass 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()StringgetRandomElement()
如果你真的必须有确切的List返回类型getList,那么你需要type参数T以及P.
public class MyClass<P, T extends List<P>> {
Run Code Online (Sandbox Code Playgroud)
这样,您可以使用MyClass<String, ArrayList<String>>其getList方法返回的方法和返回a ArrayList<String>的getRandomElement方法String.
但是,通常不需要知道确切的类型List.通常,如果你有一个List,那么对于这个类的用户来说这List是真的是什么并不重要.在这种情况下,你不需要类型参数T,只P.您可以将课程更改为:
public class MyClass<P> {
List<P> getList(/**/){}
P getRandomElement(){ /**/ }
}
Run Code Online (Sandbox Code Playgroud)
然后你就可以有MyClass<String>其getList方法返回一个List<String>与getRandomElement返回的方法String.
| 归档时间: |
|
| 查看次数: |
79 次 |
| 最近记录: |