首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Comparable<T>?

如何使用Comparable<T>?
EN

Stack Overflow用户
提问于 2012-08-22 13:45:01
回答 1查看 659关注 0票数 1

我有下面的interface

代码语言:javascript
复制
public interface Identifiable {

    public Comparable<?> getIdentifier();

}

和一个实现类

代码语言:javascript
复制
public class Agreement implements Identifiable {

    private Long id;

    public Comparable<Long> getIdentifier() {
        return id;
    }
}

编辑:请注意,可能还有其他具有不同类型标识符的实现。

现在我想,是的,比较一下可比较的:

代码语言:javascript
复制
// Agreement a;
// Agreement b;
...
if (a.getIdentifier().compareTo(b.getIdentifier()) {
...

但是compareTo给出了以下编译器错误:

类型可比较的方法compareTo(Long)不适用于参数(可比较)

这个接口应该如何与泛型一起使用?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-22 13:46:32

Comparable<T>用于作为泛型参数的上限:

代码语言:javascript
复制
public interface Identifiable<T extends Comparable<T>> {    
    public T getIdentifier();
}

public class Agreement implements Identifiable<Long> {

    private final Long id;

    public Long getIdentifier() {
        return id;
    }
}

这将强制返回类型为T,而不仅仅是可以与T相比较的东西。

您的代码本身就是不安全的。

要理解原因,请考虑以下代码:

代码语言:javascript
复制
class Funny implements Comparable<Long> { ... }
class Funnier implements Identifiable {
    public Comparable<Long> getIdentifier() {
        return new Funny();
    }
}

Identifiable<Funny> funnier;
funnier.getIdentifier().compareTo(funnier.getIdentifier());
// You just tried to pass a Funny to compareTo(Long)
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12074557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档