最好为您关心的每种类型创建具体的实现.
interface Foo{
public T getValue();
public void setValue(T value);
}
class IntFoo implements Foo{...}
class CharFoo implements Foo{...}
class DoubleFoo implements Foo{...}
interface Bar{
Collection> getAllFoo();
}
?允许集合包含任何类型的Foo对象.当您引用Foo时,仍然会丢失通用类型,但是没有很好的方法来解决.
除了拥有通用的基类,这样做确实没有任何优势.如果每个Foo都能达成共识,那么我将这样做:
abstract class Foo{
T value;
T getValue(){
return value;
}
void setValue(T value){
this.value=value;
}
// return whatever is appropriate for all implementations
abstract Object baz();
}
class IntFoo implements Foo{
Object baz(){
return null // something useful;
}
}
Collection> foos = bar.getAllFoo();
for(Foo> foo:foos){
foo.baz();
}