我有下面的interface
public interface Identifiable {
public Comparable<?> getIdentifier();
}和一个实现类
public class Agreement implements Identifiable {
private Long id;
public Comparable<Long> getIdentifier() {
return id;
}
}编辑:请注意,可能还有其他具有不同类型标识符的实现。
现在我想,是的,比较一下可比较的:
// Agreement a;
// Agreement b;
...
if (a.getIdentifier().compareTo(b.getIdentifier()) {
...但是compareTo给出了以下编译器错误:
类型可比较的方法compareTo(Long)不适用于参数(可比较)
这个接口应该如何与泛型一起使用?
发布于 2012-08-22 13:46:32
Comparable<T>用于作为泛型参数的上限:
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相比较的东西。
您的代码本身就是不安全的。
要理解原因,请考虑以下代码:
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)https://stackoverflow.com/questions/12074557
复制相似问题