2012-03-27 63 views
0

比方說,我有ClasseA implements I,我該怎麼做:Java泛型:接受一個接口在類<T>

public class Classe<T> { 
    void function(Class<T> param) { 
    ... 
    } 
} 

Classe<I> c=new Classe(); 
c.function(ClasseA.class); 

由於ClasseA實現接口I,我想function接受一個類字面鍵入ClasseA或執行I的類。

回答

0

您可以指定類型的約束是這樣的:Classe<T extends I>

+0

謝謝:我真的打算給出一個答案,這個答案不會讓我改變「Classe」的定義,但恐怕我的問題還不夠具體。 – jldupont 2012-03-27 14:24:36

+0

正如我所看到的,它必須改變類本身的定義或函數定義:void function(Class param) - 這種方式接受的函數參數類型完全不依賴於類Classe定義。 – 2012-03-27 14:42:05

1

像這樣的東西應該工作:

public Class Classe<T extends I> { 
    void function(Class<T> param) { 
    ... 
    } 
} 
1

有關於可用泛型一個很好的教程在這裏:http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf

一個可能的解決方案您的問題:

public class Snippet { 

    static class Classe<T> { 
     public void function(Class<? extends T> param) { 
      System.out.println(param); 
     } 
    } 

    interface I { 
    } 

    class ClasseA implements I { 
    } 

    public static void main(String[] args) { 
     Classe<I> c = new Classe(); 
     c.function(ClasseA.class); 
    } 

} 
+1

對我來說看起來像是矯枉過正:public > void function(X param)。你可以簡單地做同樣的事情:public void function( param) - 因爲你不在其他地方使用X類型。 – 2012-03-27 14:55:34

+0

謝謝安德烈,我更新了我的帖子... – slartidan 2012-03-27 17:44:21