Java 带通配符参数的嵌套泛型容器?
为了理解java中的泛型,我编写了以下代码 问题是-我应该如何参数化Java 带通配符参数的嵌套泛型容器?,java,generics,Java,Generics,为了理解java中的泛型,我编写了以下代码 问题是-我应该如何参数化myBox,以便它接受FilterType myFilterType public class Generics { /** * @param args */ public static void main(String[] args) { Generics g = new Generics(); Object myValue = "putThisInto
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;
}
}
}
公共类泛型{
/**
*@param args
*/
公共静态void main(字符串[]args){
泛型g=新泛型();
Object myValue=“将其放入框中”;
FilterType myFilterType3=g.new FilterType(null);//有效
Box myBox3=g.create(myFilterType3,myValue);//失败-create不接受myFilterType3
}
创建公用框(过滤器类型,T值){
返回新框(值);
}
//班级
公共类筛选器类型{
T型;
公共过滤器类型(T型){
this.type=type;
}
}
公共类箱{
T值;
公用箱(T值){
这个值=值;
}
}
}
问题在于create
方法要求FilterType类型
和T值
参数的类型一致
这里,该值被声明为一个对象
实例,因此它期望类型T generic也是一个对象实例
声明
FilterType myFilterType3
解决了这个问题。FilterType
如果FilterType
本身不是泛型的,则没有任何意义。同样地,FilterType
和Box
也没有意义,因为它们包含T
类型的字段,但没有说明T
是什么。当然它们应该是通用的。你到底想做什么?当然这没有意义,但这只是一个例子。我希望,在类型擦除下,所有内容都会下降到Object,但是FilterType
似乎与FilterType
@greuze不一样。我试图理解Generics问题似乎是我在create(FilterType,T value)
中声明的FilterType参数与值的类型相同。由于FilterType
的参数是一个通配符-创建等待?值
-该值不存在。这是正确的吗??
不是回退到对象吗?当使用另一个类或方法声明中的泛型与另一个方法参数进行比较时,我认为List
和ListNot:(@Skip:No,?
表示您不知道它是什么。它可能是对象
,字符串
,某些自定义类型
,等等。您的代码必须在不假定它是任何特定类型的情况下工作。