Java -在类中添加支持以允许乘法

本文关键字:支持 许乘法 添加 Java | 更新日期: 2023-09-27 18:07:12

在Unity3D等程序中,有Vector2/Vector3等(我在程序中使用c#编码),你可以简单地使用'*'操作数乘以Unity的矢量对象,而不使用显式方法。如:

Vector2 oldVector = new Vector2(10f, 10f);
Vector2 newVector = oldVector * -2f

然后newVector的值是(-20f, -20f)

而不是使用如下方法:

Vector2 oldVector = new Vector2(10f, 10f);
Vector2 newVector = oldVector.multiply(-2f);

基本上你会告诉Java如何处理/实现它到你的类?有办法吗?

我意识到这可能会很复杂,而且只使用方法可能会容易得多,但我觉得学习它会很有趣,并且可能在以后的阶段有用。

Java -在类中添加支持以允许乘法

非常简单:Java不允许操作符重载;这就是"隐藏"方法调用背后的概念。

你可以看到,本质上,代码最后处理的是对象/引用类型。所以即使其他语言允许你用"*"代替"multiply";最后,仍然有一个方法被调用。

基本上,这是在Java就位时故意做出的决定。许多人不喜欢操作符重载(指向c++中这样的东西经常被误用);所以争论的焦点是Java不应该允许它。

如果你主要关心的是使用*而不是乘法;还有许多其他运行在JVM上的语言(例如Scala)提供了操作符重载(但说实话:Scala没有操作符重载,但它允许您将方法命名为"*")。

简单地说:你不能。

Java不支持操作数重载。还有其他构建在JVM上的语言(groovy, kotlin和scala)也支持它,但最终它们都和你的第二个例子一样。

详细说明:Java Spec表不考虑任何操作符重载(例如,这里:https://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.17)