在具有Vector2 / Vector3等的Unity3D等程序中(我在程序中使用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处理这个/在你的课程中实现它?还有办法吗?
我意识到这可能只是令人费解,而且使用方法可能要容易得多,但我觉得学习它会很有趣,并且可能会在以后阶段使用。
答案 0 :(得分:2)
非常简单:Java不允许 operator overloading ;这就是“隐藏”方法调用背后的概念。
从本质上讲,您看到代码最终会处理对象/引用类型。所以即使其他语言允许你写“*”而不是“乘法”;最后,仍然有一个被调用的方法。
基本上这是在Java实施时有意做出的决定。许多人不喜欢运算符重载(指向C ++,这些东西经常被误用);所以有人认为Java不应该允许它。
如果您主要关注的是使用*而不是乘法;还有很多其他语言在JVM(例如Scala)上运行,它们可以让操作符重载(但说实话:Scala没有运算符重载,但它允许您为方法命名“*”)。
答案 1 :(得分:1)
简单地说:你不能。
Java不支持操作数重载。还有其他语言构建在支持它的JVM(groovy,kotlin和scala)上 - 但最终它们和你的第二个例子一样。
详细信息:Java规格表未考虑任何运算符重载(例如,此处:https://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.17)