java - 使用通用对象的已知方法

标签 java generics comparable

我有一个类接收 2 个未知的通用对象 x 和 y。如果它们具有可比性,我必须将它们与对象进行比较。我发现我可以使用 instanceof 检查对象是否实现了 Comparable 接口(interface),但我不知道如何使用 .compareTo 方法,尽管我知道对象实现了它们-

我想做的基本上是 x 和 y 是通用对象:

public void someMethod(E x, E y) {
    if (x instanceof Comparable && y instanceof Comparable) {
        if(x.compareTo(y) < 0){    //The method compareTo(E) is undefined for the type E
            //do stuff
        }
    }
}

谁能指出我正确的方向?

最佳答案

您需要指定一个通用类型绑定(bind)。现在 E 可以是任何 Object 类型,但看起来您想将它限制为任何实现 Comparable 的类型,这看起来像:

public <T extends Comparable<? super T>> void someMethod(T x, T y) {
    if (x.compareTo(y) < 0) {
        //do stuff
    }
}

建议转换的备选答案是正确的,但不是一个好的解决方案:如果您知道“x”和“y”实现了Comparable,您应该这样限制它们。

关于java - 使用通用对象的已知方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30590561/

相关文章:

java - 使用 Comparable 的compareTo 将对象与数组列表中的元素进行比较

java - Java 网络让我头疼

java - REST 服务前的请求队列

java - "Load"基于字符串名称的类,并使用字符串名称访问字段值

java - AlarmManager 设置重复但 BroadcastReceiver 没有收到警报

java - 如何子类化 ArrayList,并要求 <E> 必须扩展 Comparable

java - Arrays.sort(object[]) 没有抛出 classcastexception

C# 泛型类运算符不工作

java泛型绑定(bind)不匹配: The type is not a valid substitute for the bounded parameter

java - 如何实现实现 Collections 的模板化类