2013-03-13 69 views
0

我想要方法public void x(List<Class<some expression>> m)拋出一個錯誤,如果你試圖通過用一些表達式替換「some expression」來擴展class A{}的類。Java類構造函數中尖括號的用途是什麼?

當我使用通配符或不包含它時,我總是會遇到一個令人討厭的警告,所以我想了解爲什麼Class應該有一個維度,即使我完全沒有使用該維度。

+0

請貼全碼 – Biswajit 2013-03-13 18:10:57

+1

你應該重新閱讀[泛型的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

+0

即完整代碼... – Zackkenyon 2013-03-13 18:17:28

回答

2

我並不完全明白你想要做什麼。其實,這種方法的簽名:如果您傳遞對象,它的類的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 

    } 
} 
+0

正如我在問題中所說的,顯然我認爲,x需要一個類對象列表。 – Zackkenyon 2013-03-13 18:18:38

+0

我更新了我的答案。 – gd1 2013-03-13 18:29:22

相關問題