我對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