java泛型 - 类型Comparable< capture#1-of?>中的方法compareTo(capture#1 of?)>不适用于论据 [英] java generics - The method compareTo(capture#1-of ?) in the type Comparable<capture#1-of ?> is not applicable for the arguments

查看:444
本文介绍了java泛型 - 类型Comparable< capture#1-of?>中的方法compareTo(capture#1 of?)>不适用于论据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我想这样做:

  public interface IFieldObject {
public Comparable get();
}

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

$ b $ 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<?>得到();
}

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?)
不适用于参数
(可比较)

有什么正确的方法可以做到这一点?
(无惯性Java> = 1.6的警告)

解决方案

这个怎么样?

  public interface IFieldObject {
public< T>可比< T>得到();
}

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


So I want to do this:

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

but Eclipse gives me warnings:

Type safety: The method compareTo(Object) belongs to the raw type Comparable. References to generic type Comparable should be parameterized

So I turned this into:

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

which does not compile because of:

The method compareTo(capture#1-of ?) in the type Comparable is not applicable for the arguments (Comparable)

What's the right way to do that ? (without warnings following idiomatic Java >= 1.6)

解决方案

How about this?

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

这篇关于java泛型 - 类型Comparable&lt; capture#1-of?>中的方法compareTo(capture#1 of?)&gt;不适用于论据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆