簡體   English   中英

java generics - Comparable 類型中的方法 compareTo(capture#1-of?)<capture#1-of ?> 不適用於 arguments</capture#1-of>

[英]java generics - The method compareTo(capture#1-of ?) in the type Comparable<capture#1-of ?> is not applicable for the arguments

所以我想這樣做:

public interface IFieldObject {
    public Comparable get();
}

public interface IFieldCondition {
    public boolean apply(IFieldObject field, Comparable compare);
}

public class EqualTo implements IFieldCondition {
    public boolean apply(IFieldObject field, Comparable compare) {
        return (field.get().compareTo(compare) == 0);       
    }    
}

但是 Eclipse 給了我警告:

類型安全:方法 compareTo(Object) 屬於原始類型 Comparable。 對泛型 Comparable 的引用應該被參數化

所以我把它變成了:

public interface IFieldObject {
    public Comparable<?> get();
}

public interface IFieldCondition {
    public boolean apply(IFieldObject field, Comparable<?> compare);
}

public class EqualTo implements IFieldCondition {
    public boolean apply(IFieldObject field, Comparable<?> compare) {
        return (field.get().compareTo(compare) == 0);       
    }
}

由於以下原因無法編譯:

Comparable 類型中的 compareTo(capture#1-of?) 方法不適用於 arguments (Comparable)

這樣做的正確方法是什么? (在慣用的 Java >= 1.6 之后沒有警告)

目前,您無法保證field.get()返回的類型與方法指定的類型真正可比。 理想情況下,使整個事情通用,例如:

public interface IFieldObject<T extends Comparable<T>> {
    public T get();
}

public interface IFieldCondition<T> {
    public boolean apply(IFieldObject<T> field, Comparable<T> compare);
}

public class EqualTo<T> implements IFieldCondition<T> {
    public boolean apply(IFieldObject<T> field, Comparable<T> compare) {
        return (field.get().compareTo(compare) == 0);       
    }
}

毫無疑問,您可以使用額外的捕獲使其更通用,但這是起點。

這個怎么樣?

public interface IFieldObject {
    public<T> Comparable<T> get();
}

public interface IFieldCondition {
    public boolean apply(IFieldObject field, Comparable<?> compare);
}

public class EqualTo implements IFieldCondition {
    public boolean apply(IFieldObject field, Comparable<?> compare) {
        return (field.get().compareTo(compare) == 0);       
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM