我有以下通用类:
public class Foo<T> {
private String name;
private T value;
... // get/set methods
}
Run Code Online (Sandbox Code Playgroud)
在另一堂课中我想要:
public class Bar {
private List<Foo> list;
public <T> Foo<T> getFoo(String name) {
// find elem which matches the name
return listElement;
}
}
Run Code Online (Sandbox Code Playgroud)
T我猜签名中所指的内容没有联系getFoo()。IntelliJ 抱怨未检查的分配。我不能这样做,List<Foo<T>>因为T在课堂上下文中不存在Bar。
可以这样做吗,或者在这种情况下我是否滥用了泛型的整个概念?
您还需要该课程。因为类型擦除。
public class Bar {
private List<Foo<?>> list;
public <T> Foo<T> getFoo(Class<T> type, String name) {
// find elem which matches the name
return type.cast(listElement);
}
}
Run Code Online (Sandbox Code Playgroud)
结论是,这样的属性包装器对于按名称获取的 getter 没有任何意义。按类(例如按接口)获取方法可能更有趣。