为了理解Java中的泛型,我编写了以下代码。
问题是-我应该如何参数化myBox
以便它接受FilterType <?> myFilterType
?
public class Generics {
/**
* @param args
*/
public static void main(String[] args) {
Generics g = new Generics();
Object myValue = "putThisIntoTheBox";
FilterType<?> myFilterType3 = g.new FilterType<>(null); //works
Box myBox3 = g.create(myFilterType3, myValue); //fails - create won't accept myFilterType3
}
public <T> Box<T> create(FilterType<T> type, T value) {
return new Box<T>(value);
}
//CLASSES
public class FilterType<T>{
T type;
public FilterType(T type) {
this.type = type;
}
}
public class Box<T>{
T value;
public Box(T value) {
this.value = value;
}
}
}
最佳答案
问题是create
方法要求FilterType<T> type
和T value
参数的类型一致。
在这里,该值被声明为Object
实例,因此它也希望类型T泛型也是一个Object实例。
声明FilterType<Object> myFilterType3
可解决此问题。