我想要方法public void x(List<Class<some expression>> m)
拋出一個錯誤,如果你試圖通過用一些表達式替換「some expression」來擴展class A{}
的類。Java類構造函數中尖括號的用途是什麼?
當我使用通配符或不包含它時,我總是會遇到一個令人討厭的警告,所以我想了解爲什麼Class應該有一個維度,即使我完全沒有使用該維度。
我想要方法public void x(List<Class<some expression>> m)
拋出一個錯誤,如果你試圖通過用一些表達式替換「some expression」來擴展class A{}
的類。Java類構造函數中尖括號的用途是什麼?
當我使用通配符或不包含它時,我總是會遇到一個令人討厭的警告,所以我想了解爲什麼Class應該有一個維度,即使我完全沒有使用該維度。
我並不完全明白你想要做什麼。其實,這種方法的簽名:如果您傳遞對象,它的類的List
不延長YourClass
public void x(List<? extends YourClass> m)
不會編譯(姑且稱之爲如此,而不是A
)。
如果你想讓你的x
方法得到一個Class
對象列表作爲參數,那是另一個問題。你確定你不願意通過延伸YourClass
的類的對象List
嗎?如果是這樣,該方法簽名應該可以工作。
編輯:既然你說你想傳遞的類的列表,那麼這應該工作:
public void x(List<Class<? extends YourClass>> m)
測試是這樣的:
import java.util.*;
class YourClass {}
class YourClassEx extends YourClass {}
public class Test {
public static void x(List<Class<? extends YourClass>> m) {
// stuff...
}
public static void main(String[] argv) {
List<Class<? extends YourClass>> list = new ArrayList<>();
list.add(YourClass.class);
list.add(YourClassEx.class);
x(list); // compiles fine until here
list.add(String.class); // doesn't compile
x(new ArrayList<Class>()); // doesn't compile, either
}
}
正如我在問題中所說的,顯然我認爲,x需要一個類對象列表。 – Zackkenyon 2013-03-13 18:18:38
我更新了我的答案。 – gd1 2013-03-13 18:29:22
請貼全碼 – Biswajit 2013-03-13 18:10:57
你應該重新閱讀[泛型的Java教程](http://docs.oracle.com/javase/tutorial/java/generics/)和[Angelika Langer的常見問題](http://www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.html ) - 我很肯定他們會繼續這樣做。然後用你想要工作或不工作的代碼的例子來提出一個更具體的問題。 – millimoose 2013-03-13 18:13:56
即完整代碼... – Zackkenyon 2013-03-13 18:17:28