TestClass中有一個引數Class t。t 不能分配給 ClassA.class?
puclic class TestClass<T extends ClassA>{
private Class<T> t;
public TestClass(Class<T> t){
//this.t = ClassA.class; // why not?
this.t = t;
}
}
但是,可以從外面匯入。
public class Test{
public static void main(String[] args) {
TestClass tc = new TestClass(ClassA.class);//It's ok
}
}
希望內部也能賦值!
uj5u.com熱心網友回復:
泛型 onj.l.Class單獨使用,以便運算式thatClass.newInstance()具有 type T,例如,您可以執行以下操作:
Class<String> c = ...;
String x = c.newInstance();
如果您知道這一點并仔細考慮,那么您的人腦及其用途的所有背景關系知識就會意識到:
Class<Child> childClass = ...;
Class<Parent> parentClass = childClass;
是完全安全的。
但是 javac 不能得出這個結論。Javac 不會成為每個使用它的類的泛型用法的活字典。它只知道如果您允許,泛型通常是不安全的;它只是不知道 jlClass 的任何用法都不會發生不安全的情況。
它發生在串列中,很容易。這里:
List<Integer> ints = new ArrayList<Integer>();
List<Number> nums = ints;
Number n = 5.0; // a double
assert n instanceof Double; // true, of course.
nums.add(n); // legal java, of course.
Integer i = ints.get(0); // um.. wait. uhoh.
仔細想想上面的片段。用java代碼撰寫并嘗試編譯它。它的關鍵是理解的基本原則泛型是不變的-一個亞型是不能分配給超類,而不是當我們正在尋找的型別是內部的<>。您可以替換:List<Number>withList<? extends Number>然后編譯更進一步,但現在.add()失敗了(事實上List<? extends Whatever>,除了字面上的null.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/350003.html
