2015-12-19 64 views
-1

我是新來的泛型,並想解決一個小任務。比較<V extends Comparable <V>>到Integer

我想給類ComparePredicate類型的「V extends Comparable」類型的兩個對象,然後檢查方法「isOk」,如果Tree類的int值「值」在這兩個對象之間。 我選擇了compareTo方法,因爲Integer和V應該是類型可比的,但編譯器會給出錯誤。 我認爲它只是一個語法問題。

那麼,我該如何寫出正確的。希望你們能幫助我。 感謝您的回答。

類ComparePredicate

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; 
    } 

} 

樹類

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; 
    } 
} 
+3

爲什麼你認爲'V'與'Integer'相差無幾? –

+0

你可以檢查你的V(minEle,maxEle)是一個整數還是更好的一個數字(使用實例),然後投射和比較... –

+0

@SotiriosDelimanolis,因爲Integer實現了Comparable和V。所以我認爲他們可以比較 –

回答

0

更改樹類

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 ... 

} 

,改變isOk()

@Override 
    public boolean isOk(Tree<V> tree) { 
     return minEle.compareTo(tree.getValue()) <= 0 && 
       maxEle.compareTo(tree.getValue()) >= 0; 
    } 
相關問題