与类型变量不兼容的类型

Mar*_*tus 0 java generics

任何人都可以告诉我为什么以下无法编译?

class A<K> {

    public <K> A() {
    }

    public static <K> A<K> create(Class<K> k) {
        return new A<K>();
    }
}


public class B<K, V> {

    A<K> ak;

    public <K, V> B(Class<K> klass, V v) {
         ak = A.create(klass);
    }
}
Run Code Online (Sandbox Code Playgroud)

它失败了:

[javac] /home/.../src/B.java:17: error: incompatible types
[javac]         ak = A.create(klass);
[javac]                      ^
[javac]   required: A<K#2>
[javac]   found:    A<K#1>
[javac]   where K#1,V,K#2 are type-variables:
[javac]     K#1 extends Object declared in constructor <K#1,V>B(Class<K#1>,V)
[javac]     V extends Object declared in constructor <K#1,V>B(Class<K#1>,V)
[javac]     K#2 extends Object declared in class B
[javac] 1 error
Run Code Online (Sandbox Code Playgroud)

这是一个SSCCE所以请不要问我想要完成什么.

Boz*_*zho 5

  • 摆脱<K>在构造函数中A
  • 摆脱<K, V>在构造函数中B

构造函数不需要重新定义类的类型参数.如果你这样做,它们被定义为隐藏类中的那些的新类型参数(Eclipse警告你).