在Java中使用对象运算符

6

假设我们有一个如下所示的类:

public class Time{
 int hour;
 int min;
 Time(int hour,int m){
  hour=h;
  min=m;
 }
 public String toString(){
 return hour+":"+min;
 }
}

我希望在主函数中编写以下代码,并得到注释中所示的结果:

Time t1 = new Time(13,45);
Time t2= new Time(12,05);
System.out.println(t1>=t2); // true
System.out.println(t1<t2);  // false
System.out.println(t1+4);   // 17:45
System.out.println(t1-t2);  // 1:40
System.out.println(t1+t2);  // 1:50 (actually 25:50)
System.out.println(t2++);   // 13:05

我可以通过接口等方式来实现吗?还是唯一的选择就是编写方法而不使用运算符?

提前感谢。


2
不支持Java中的运算符重载。 - Thomas Stets
谢谢。我不知道我们称之为什么:“运算符重载”。那我就选择C ++吧。 - sdoganay
5个回答

5

3
你无法重载运算符,必须编写支持这些运算符的方法。建议你不要在Time类中编写这些方法,而是编写工具方法。
例如:
System.out.println(TimeUtil.substract(t1,t2));

1
你甚至可以实现Comparable接口并重写compareTo方法

1
在Java中不支持运算符重载。 (这可能会使代码混淆,并且对于基于引用的语言效果不好:甚至简单的 == 也会对Java对象引用造成很多困惑)。
对于您要实现的某些方法,Java中惯用的方法是实现 Comparable<T> 。然后(1)您的方法将是惯例,而(2)您将能够将类的实例存储在集合和树映射中。
对于其他操作,例如减法,请编写一个名为subtract的函数。仔细考虑这应该返回什么。它应该是一个时间,还是一个时间间隔?我还质疑添加两个时间对象的有效性。

0
Java不允许运算符重载(在这里)。但是您可以手动添加一些功能到您的类中,例如multiply(Time t)。为了比较您的类,您可以集成Comparable接口,该接口允许您添加所需的功能来比较两个类。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接