Java 比较<;V.可比性<;V>&燃气轮机;到整数

Java 比较<;V.可比性<;V>&燃气轮机;到整数,java,generics,comparable,generic-programming,Java,Generics,Comparable,Generic Programming,我是泛型新手,想解决一个小问题 我想给ComparePredicate类指定两个类型为“V extends Comparable”的对象,然后如果树类的int值“value”在这两个对象之间,则签入方法“isOk”。 我选择compareTo方法是因为Integer和V应该是comparable类型,但编译器给出了一个错误。 我认为这只是一个句法问题 那么,我需要如何正确地书写它呢。希望你们能帮助我。 谢谢你的回答 类比较预测 public class ComparePredicate<V

我是泛型新手,想解决一个小问题

我想给ComparePredicate类指定两个类型为“V extends Comparable”的对象,然后如果树类的int值“value”在这两个对象之间,则签入方法“isOk”。 我选择compareTo方法是因为Integer和V应该是comparable类型,但编译器给出了一个错误。 我认为这只是一个句法问题

那么,我需要如何正确地书写它呢。希望你们能帮助我。 谢谢你的回答

类比较预测

public class ComparePredicate<V extends Comparable<V>> implements TreePredicate<V> {

    V minEle;
    V maxEle;

    public ComparePredicate(V minEle, V maxEle) {
        this.minEle = minEle;
        this.maxEle = maxEle;
    }

    @Override
    public boolean isOk(Tree<V> tree) {

        return minEle.compareTo(Integer.valueOf(tree.getValue())) > 0 &&
                maxEle.compareTo(Integer.valueOf(tree.getValue())) < 1;
        //COMPILER ERROR: "The method compareTo(V) in the type Comparable<V> is not applicable for the arguments (Integer)"

        return false;
    }

}
公共类ComparePredicate实现TreePredicate{
V minEle;
V maxEle;
公共比较预测(V minEle,V maxEle){
this.minEle=minEle;
this.maxEle=maxEle;
}
@凌驾
公共布尔isOk(树){
返回minEle.compareTo(Integer.valueOf(tree.getValue())>0&&
maxEle.compareTo(Integer.valueOf(tree.getValue())<1;
//编译器错误:“Comparable类型中的compareTo(V)方法不适用于参数(整数)”
返回false;
}
}
类树

public class Tree<T> {
    private int value;
    private final Tree<T> left;
    private final Tree<T> right;

    public Tree(int v, Tree<T> l, Tree<T> r) {
        this.value = v;
        this.left = l;
        this.right = r;
    }

    public int getValue() {
        return this.value;
    }

    public Tree<T> getLeft() {
        return this.left;
    }

    public Tree<T> getRight() {
        return this.right;
    }
}
公共类树{
私有int值;
私人最后一棵树离开;
私有最终树权;
公共树(int v,树l,树r){
该值=v;
这个左=l;
这个。右=r;
}
public int getValue(){
返回此.value;
}
公共树getLeft(){
把这个还给我;
}
公共树getRight(){
归还这个。对;
}
}
更改树类

static class Tree<T> {
    private T value;
    private final Tree<T> left;
    private final Tree<T> right;

    public Tree(T v, Tree<T> l, Tree<T> r) {
        this.value = v;
        this.left = l;
        this.right = r;
    }

    public T getValue() {
        return this.value;
    }

    // getters ...

}

为什么你认为一个
V
与一个
整数
?你可以检查你的V(minEle,maxEle)是一个整数还是一个更好的数字(使用的实例),然后转换并比较…@SotiriosDelimanolis,因为整数也实现了compariable和V。所以我认为它们可以比较
V
V
相比<代码>整数与
整数
相当。
    @Override
    public boolean isOk(Tree<V> tree) {
        return minEle.compareTo(tree.getValue()) <= 0 &&
                maxEle.compareTo(tree.getValue()) >= 0;
    }