我对Java中的泛型有一个疑问,即使用通配符。我有一个例子类GenClass这样的:Java中的泛型使用通配符
public class GenClass<E> {
private E var;
public void setVar(E x) {
var = x;
}
public E getVar() {
return var;
}
}
我还有一个简单的类:
public class ExampleClass {
}
我写了下面的测试类:现在
public class TestGenClass {
public static void main(String[] str) {
ExampleClass ec = new ExampleClass();
GenClass<ExampleClass> c = new GenClass<ExampleClass>();
c.setVar(ec);
System.out.println(c.getVar()); // OUTPUT: [email protected]
}
}
,如果我用一个通配符并写在测试类中:
GenClass<?> c = new GenClass<ExampleClass>();
上的地方:
GenClass<ExampleClass> c = new GenClass<ExampleClass>();
编译器有这个新的说法没有问题,但是,它抱怨
c.setVar(ec);
它说,“方法(SETVAR())不适用为参数(ExampleClass)“。为什么我会收到此消息?
我认为我使用通配符的方式使得引用变量c是GenClass类型,它将接受任何类作为参数 - 在E的地方我将拥有任何类。这只是变量的声明。然后,我
new GenClass<ExampleClass>()
初始化它这意味着我创建类型GenClass,其具有作为参数的一类ExampleClass类型的一个对象。所以,我认为现在GenClass中的E将是ExampleClass,我将能够使用方法setVar(),并将它作为ExampleClass类型的参数。 这是我的假设和理解,但似乎Java并不喜欢它,而我却说得不对。 任何意见表示赞赏,谢谢。
根据您的用户历史记录,您从未接受过答案。你认为你现在可以开始吗?你甚至可以得到2个代表点和一个免费的徽章(第一次)。 :d – 2009-02-05 16:29:01