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

时间:2016-09-16 12:39:13

标签: java c# multiplication operand

在具有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处理这个/在你的课程中实现它?还有办法吗?

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

2 个答案:

答案 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