我在个人Java项目中使用javax.swing.event.EventListenerList类遇到麻烦。这不是一个简单的例子,所以我举了一个有相同问题的简单例子。

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())来处理所有这些类。

有人可以帮助我吗?

最佳答案

c中将doSomething定义为ComparableString

    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

关于java - Java泛型编译错误“Class <capture#1-of? ……”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23031820/

10-10 14:04