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

Java - Add Support in a Class to Allow Multiplying

在 Unity3D 等具有 Vector2/Vector3 等的程序中(我在程序中使用 C# 编码),您只需使用“*”操作数即可将 Unity 的 Vector 对象乘以浮点数,无需显式方法.例如:

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 将 this/implement 处理到您的 class 中?有办法吗?

我意识到这可能只是令人费解,而且使用方法可能会容易得多,但我觉得学习起来会很有趣,并且可能在以后的阶段有用。

很简单:Java不允许operator overloading;这就是 "hiding" 以这种方式调用方法背后的概念。

你看,本质上,代码最终处理的是 object/reference 类型。所以即使其他语言允许您写“*”而不是 "multiply";最后还是调用了一个方法。

基本上,这是在 Java 到位时有意做出的决定。许多人不喜欢运算符重载(指的是 C++ 经常滥用这种东西);所以有人认为 Java 不应该允许它。

如果您主要关心的是使用 * 而不是乘法; JVM(例如 Scala)上有许多其他语言 运行 可以让您重载运算符(但老实说:Scala 没有运算符重载,但它允许您将方法命名为“*” ).

简单地说:你不能。

Java不支持操作数重载。还有其他构建在 JVM 上的语言(groovy、kotlin 和 scala)支持它——但最终它们的作用与您的第二个示例相同。

详细说明:Java 规范 sheet 不考虑任何运算符重载(例如,此处:https://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.17