【问题标题】:Generic class which compares two objects with same type and getting the smallest of both?比较具有相同类型的两个对象并获得两者中最小的通用类?
【发布时间】:2018-01-08 19:24:44
【问题描述】:

我尝试编写一个泛型类来比较具有相同类型的两个对象。班级应该让我成为两者中最小的。我的代码不起作用。

public class compare < T > {

    private T type1;
    private T type2;

    public compare(T type1, T type2) {
        this.type1 = type1;
        this.type2 = type2;
    }

    public T getSmallest() {
        if (type1 > type2) {
            return type2;
        } else if (type1 == type2) {
            return 0;
        } else {
            return type1;
        }
    }
}

【问题讨论】:

  • 你的代码很差,所以不,它不会工作。喜欢getSmallest() 返回0T。你不能像那样返回不同的类型。
  • 欢迎来到 Stack Overflow!请拿起tour,环顾四周,并通读help center,尤其是How do I ask a good question?What topics can I ask about here?。请阅读并关注Java Naming Conventions
  • 您需要确认T extends Comparable&lt;? super T&gt;并致电type1.compareTo(type2)
  • 您不能使用&gt;== 等运算符比较 对象。有一个接口来定义对象的自然顺序,即Comparable 让您的对象实现此接口并使用compareTo() 方法找到较小的对象。不需要泛型。

标签: java object generics compare


【解决方案1】:

您的代码的主要问题是比较运算符 &lt;&gt; 仅为原始算术类型(char、byte、short、int、long、float 和 double)定义。您不能将这些运算符应用于任意引用(非原始)类型,并且泛型类型参数必须是引用类型。

您似乎正在尝试重新发明ComparatorComparable 接口。仅当引用类型实现Comparable&lt;T&gt; 接口并提供compareTo() 方法或使用实现Comparator&lt;T&gt; 的帮助类时,才能为排序“比较”引用类型(即更大/更小)。在第一种情况下(implements Comparable&lt;T&gt;),类本身根据其内部状态以任何适当的术语定义比较;在第二种情况下,比较是在助手implements Comparator&lt;T&gt; 类中指定的,基于助手可见的任何内部状态。

查看 Oracle Java 教程的 Object Ordering 部分了解更多详细信息。

【讨论】:

    【解决方案2】:

    要扩展上述 cmets,您应该为任何您希望能够与 T 类型的其他对象进行比较/排序的任何类 T 实现 Comparable。接口只有一个您必须实现的方法,compareTo 函数应该返回一个负数、正数或零值。然后,当 T 实现 Comparable 时,您可以在 T 的泛型类中使用此函数。

    https://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html

    【讨论】:

      【解决方案3】:

      您应该实现 Comparable 并且 getSmallest 应该成为 compareTo(T o) 方法。

      在此处查看接口的 javadoc:https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-29
        • 1970-01-01
        • 2020-12-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多