为了理解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;
}
}
}
答案 0 :(得分:1)
问题是create
方法需要FilterType<T> type
和T value
参数的一致类型。
这里的值被声明为Object
实例,因此它期望类型T generic也是一个Object实例。
声明FilterType<Object> myFilterType3
解决了问题。