对 Java 中的对象使用运算符
Using operators with objects in Java
假设我们有一个 class 如下:
public class Time{
int hour;
int min;
Time(int hour,int m){
hour=h;
min=m;
}
public String toString(){
return hour+":"+min;
}
}
我想在 main 中写一些这样的代码,结果如评论中所示:
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
我可以通过接口等来做到这一点吗?或者我唯一能做的就是编写方法而不是使用运算符?
提前致谢。
这就是所谓的运算符重载,Java不支持:Operator overloading in Java
所以是的,你必须坚持方法。
编辑:正如一些评论所说,您可以实现 Comparable 来制作您自己的 compareTo 方法
你根本做不到。您不能重载运算符。您需要编写方法来支持这些运算符。
与其在 Time 中写方法,我建议你写 util 方法。
例如:
System.out.println(TimeUtil.substract(t1,t2));
你甚至可以实现类似的接口和
在那里覆盖 compareTo 方法
Java 不允许运算符重载 (here). But you can add some functionallity to your class like muliply(Time t)
and write it manually. To compare your Classes you can integrate the Comparable - 接口让您添加所需的功能来比较两个 类.
Java 不支持运算符重载。 (它可能会混淆并且不适用于基于引用的语言:即使是不起眼的 ==
也会导致与 Java 对象引用的混淆)。
对于您想要实现的一些方法,Java 中惯用的方法是实现 Comparable<T>
。然后 (1) 您的方法将是传统的,并且 (2) 您将能够在集合和树图中存储 class 的实例。
对于其他操作,比如减法,写一个函数subtract
。仔细想想这应该是什么return。应该是一个时间,还是一个时间间隔?我也质疑添加两个时间对象的有效性。
假设我们有一个 class 如下:
public class Time{
int hour;
int min;
Time(int hour,int m){
hour=h;
min=m;
}
public String toString(){
return hour+":"+min;
}
}
我想在 main 中写一些这样的代码,结果如评论中所示:
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
我可以通过接口等来做到这一点吗?或者我唯一能做的就是编写方法而不是使用运算符?
提前致谢。
这就是所谓的运算符重载,Java不支持:Operator overloading in Java
所以是的,你必须坚持方法。
编辑:正如一些评论所说,您可以实现 Comparable 来制作您自己的 compareTo 方法
你根本做不到。您不能重载运算符。您需要编写方法来支持这些运算符。
与其在 Time 中写方法,我建议你写 util 方法。
例如:
System.out.println(TimeUtil.substract(t1,t2));
你甚至可以实现类似的接口和 在那里覆盖 compareTo 方法
Java 不允许运算符重载 (here). But you can add some functionallity to your class like muliply(Time t)
and write it manually. To compare your Classes you can integrate the Comparable - 接口让您添加所需的功能来比较两个 类.
Java 不支持运算符重载。 (它可能会混淆并且不适用于基于引用的语言:即使是不起眼的 ==
也会导致与 Java 对象引用的混淆)。
对于您想要实现的一些方法,Java 中惯用的方法是实现 Comparable<T>
。然后 (1) 您的方法将是传统的,并且 (2) 您将能够在集合和树图中存储 class 的实例。
对于其他操作,比如减法,写一个函数subtract
。仔细想想这应该是什么return。应该是一个时间,还是一个时间间隔?我也质疑添加两个时间对象的有效性。