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

标签 java c# multiplication operand

在 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/

相关文章:

c - 在 C 中可以乘以 i** 吗?像 i++ 为什么 i** 在 C 中不起作用?

java - 无符号乘法求和算法

c++ - 在 C++ 中乘以大数 - 代码有错误吗?如何改进?

java - 加载图像 picasso 打开失败: EACCES (Permission denied)

java - 在 Java 中如何关闭 WebSocketContainer/WebSocketClient/Jetty 客户端?

c# - NUnit 系统溢出异常 : Arithmetic operation resulted in an overflow

c# - C#/.NET 4.0 中新的 NoPIA 和类型等效功能是否意味着不再需要 Microsoft.mshtml.dll

java - 从 SharedPreferences 检索值时无法将获取的 java.lang.String 转换为 java.lang.Integer

java - LibGdX 平铺 map Box2d 与多边形 map 对象碰撞

c# - 使用 Azure 或 Microsoft Identity 中的角色进行授权