2014-04-12 32 views
1

我在使用javax.swing.event.EventListenerList類在我的個人Java項目中遇到麻煩。這不是一件簡單的事情,所以我做了一個簡單的例子,它有同樣的問題。Java泛型編譯錯誤「Class <capture#1 of?...」

package test; 
public class GenericTest { 
    public static void main(String[] args) { 
     GenericTest gt = new GenericTest(); 
     gt.doTest(String.class); 
    } 
    private void doTest(Class<? extends Comparable> type) { 
     doSomething(type, "test"); // Compile error : 
     // The method doSomething(Class<C>, C) 
     // in the type GenericTest is not applicable for the arguments 
     // (Class<capture#1-of ? extends Comparable>, String) 
    } 
    // third party API like javax.swing.event.EventListenerList.add() 
    private <C extends Comparable> void doSomething(Class<C> ct, C c) { 
     // ... 
    } 
} 

我得到了像代碼中的泛型編譯錯誤。

我有很多類擴展了特定的接口,如java.lang.Comparable,我想用代碼中的單個方法處理所有這些類似doTest()

任何人都可以幫到我嗎?

+2

嗯,你的'doSomething'方法希望第二個參數是用於第一個參數的類的實例。想象一下,如果我調用'doTest(Integer.class)'... –

+0

謝謝。我明白了。 – Shinbop

回答

0

doSomething定義cComparableString

doTest(String.class); 
} 
private static void doTest(Class<? extends Comparable> type) { 
    doSomething(type, "test"); 

} 
// third party API like javax.swing.event.EventListenerList.add() 
private static <C extends Comparable> void doSomething(Class<C> ct, Comparable c) { 
    // ... 
} 

請注意,你不能從ObjectStringComparable隱式轉換爲C。爲了獲得更深入的瞭解,在doSomething嘗試內做到這一點:

C s = c; //Type mismatch: cannot convert from Comparable to C