在 Unity3D 等具有 Vector2/Vector3 等的程序中(我在程序中使用 C# 编码),您只需使用“*”操作数即可将 Unity 的 Vector 对象乘以 float ,无需显式方法。例如:
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 不允许 operator overloading ;这就是以这种方式“隐藏”方法调用背后的概念。
你看,本质上,代码最终是在处理对象/引用类型。所以即使其他语言允许你写“*”而不是“乘”;最后,仍然有一个方法被调用。
基本上,这是在部署 Java 时有意做出的决定。许多人不喜欢运算符重载(指的是 C++ 经常滥用这种东西);所以有人认为 Java 不应该允许它。
如果您主要关心的是使用 * 而不是乘法;在 JVM 上运行的许多其他语言(例如 Scala)可以为您提供运算符重载(但老实说:Scala 没有运算符重载,但它允许您将方法命名为“*”)。
关于Java - 在类中添加支持以允许乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39531769/