【问题标题】:Java object: value for comparison in if statement, operator overloadingJava 对象:if 语句中用于比较的值、运算符重载
【发布时间】:2013-03-07 09:29:32
【问题描述】:

是否可以定义用于自定义对象的 if 语句比较的值?

我有:

公共类元素实现 Comparable {

public int value;
public int[] sequence;
public int length;

public element(){}   

public element(int val){
    this.value = val;
}

@Override
public int compareTo(Object o) {
    return
}

}

我想用if语句如下:

如果(元素1>元素2)..

而不是传统的:

如果 (element1.value > element2.value) ..

我无法使用比较器、toString() 等来完成此操作

【问题讨论】:

  • element1element2 是什么?如果它们是element 类型的对象,那么如果你正确地实现了compareTo(),你就可以使用element1.compareTo(element2)
  • 您应该尝试更具体。您的要求不明确。
  • Java 中没有运算符重载。 <> 只能用于数字(byte、short、char、int、long、float、double)。
  • Java 不支持运算符重载。您可以调用 element1.compareTo(element2) 进行比较,并确保 compareTo 根据需要返回 -1,0 和 1。

标签: java object return


【解决方案1】:

根据JLS 15.20.1,您不能将对象引用与> 运算符一起使用; Java 不支持运算符重载。但是您使用Comparator 走在正确的轨道上。

if (comparator.compare(element1, element2) > 0)  // if (element1 > element2)

如果您的类是 Comparable<Element> 也是可能的,即与其他元素相当。

if (element1.compareTo(element2) > 0)  // if (element1 > element2)

【讨论】:

    【解决方案2】:

    不,这在 Java 中是不可能的。来自JLS §15.20.1

    数值比较运算符的每个操作数的类型 必须是可转换 (§5.1.8) 为原始数字的类型 类型,或发生编译时错误。

    这在像 Python 这样的语言中是可能的,其中几乎所有运算符都可以重载以使用非标准类。

    【讨论】:

      【解决方案3】:

      Java 不支持这个。您可以改用以下内容:

      if (element1.compareTo(element2) > 0) {
      
      }
      

      在你的 compareTo 方法中,这样做:

      public int compareTo(YourClassObject o) {
          return (this.value - YourClassObject.value);
      }
      

      【讨论】:

        【解决方案4】:

        由于 Java 不支持运算符重载,因此使用执行所需比较的方法比较两个对象是可用的最佳选择。

        WrapperClass.compare(object1, object2) > 0 for object1.value > object2.value
        WrapperClass.compare(object1, object2) < 0 for object1.value < object2.value
        WrapperClass.compare(object1, object2) = 0 for object1.value == object2.value
        

        String 是提供与连接运算符一样的运算符重载的类之一。

        String str1 = "This ";
        String str2 = "is a string";
        str1 + str2 equals "This is a string"
        

        【讨论】:

          猜你喜欢
          • 2022-01-09
          • 1970-01-01
          • 1970-01-01
          • 2017-01-03
          • 1970-01-01
          • 1970-01-01
          • 2013-12-02
          • 2012-12-06
          • 2012-05-30
          相关资源
          最近更新 更多