Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 绑定不匹配:泛型类(泛型类的扩展可比(泛型类的扩展可比))_Java_Generics_Comparable - Fatal编程技术网

Java 绑定不匹配:泛型类(泛型类的扩展可比(泛型类的扩展可比))

Java 绑定不匹配:泛型类(泛型类的扩展可比(泛型类的扩展可比)),java,generics,comparable,Java,Generics,Comparable,我知道这听起来很困惑,但我只能这样解释了。(你可以建议一个更好的标题)。我有三门课:- A public class A <T extends Comparable<T>> { ... } C public class C <T extends Comparable<T>> implements Comparable<C>{ private T t = null; public C (T t){

我知道这听起来很困惑,但我只能这样解释了。(你可以建议一个更好的标题)。我有三门课:-

A

public class A <T extends Comparable<T>> {
    ...
}
C

public class C <T extends Comparable<T>> implements Comparable<C>{
    private T t = null;
    public C (T t){
        this.t = t; 
    }
    @Override
    public int compareTo(C o) {
        return t.compareTo((T) o.t);
    }
    ...
}
public类实现了可比较的{
私有T=null;
公共C(T){
t=t;
}
@凌驾
公共内部比较(C o){
返回t.compareTo((t)o.t);
}
...
}
我尝试在
B
中实例化
A
时出错

public class B {
    A<C> var = new A<C>(); 
    // Bound mismatch: The type C is not a valid substitute for the bounded parameter <T extends Comparable<T>> of the type A<T>
    ...
}

绑定不匹配:由于@Boris The Spider上面的注释,类型C不是类型a的绑定参数的有效替代品

问题是
C
B
. 更改了实例化以包含参数(取决于需要)

编辑2: 此外,问题中有一个打字错误(下面是w.r.t.的评论)

公共类C实现了类似的{…}

感谢上面的评论@Boris the Spider

问题是
C
B
. 更改了实例化以包含参数(取决于需要)

编辑2: 此外,问题中有一个打字错误(下面是w.r.t.的评论)

公共类C实现了类似的{…}

首先,您的
C
B
中的一个rawtype。在
C
比较方法中。这里有大量的原始类型和泛型混合,这就是为什么会有问题。是的,但是如果它实现了Comparable,它会工作吗?或者更好的是,我有办法让它工作吗?没有。因为你的
C
只能与rawtype
C
相比。就像我说的,你需要多读点书。明白了!假设我想存储整数,它应该是
A var=new AFor,而你的
C
B
中的一个rawtype。在
C
比较方法中。这里有大量的原始类型和泛型混合,这就是为什么会有问题。是的,但是如果它实现了Comparable,它会工作吗?或者更好的是,我有办法让它工作吗?没有。因为你的
C
只能与rawtype
C
相比。就像我说的,你需要多读点书。明白了!假设我想存储整数,它应该是
A var=new A你也在
C
本身中使用原始类型
C
。你说得对!虽然没有必要,但我得到了一个警告。您使用原始类型
C
的另一个地方是
public类C
。它应该是
公共C类
。如果你使用原始类型,可能会发生一些非常奇怪的事情,所以要不惜一切代价避免它们。你也在
C
本身中使用原始类型
C
。你是对的!虽然没有必要,但我得到了一个警告。您使用原始类型
C
的另一个地方是
public类C
。它应该是
公共C类
。如果使用原始类型,可能会发生一些非常奇怪的事情,所以要不惜一切代价避免它们。
A< C<Integer> > var = new A< C<Integer> >();
public int compareTo(C<T> o) {
    return t.compareTo(o.t);
}
public class C <T extends Comparable<T>> implements Comparable< C<T> >{...}