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

在有Vector2 / Vector3等(我在程序中使用C#编码)的Unity3D等程序中,只需使用'*'操作数就可以将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来处理这个/将它实现到你的课堂? 有什么方法吗?

我意识到这可能会令人费解,而且只是使用方法可能会容易得多,但是我觉得在后期阶段学习或许会有用。

非常简单:Java不允许运算符重载 ; 这是“隐藏”方法调用的概念。

实际上,你会发现代码最后是处理对象/引用类型的。 所以即使其他语言允许你写“*”而不是“乘”。 最后,还有一个被调用的方法。

基本上这是Java实施时有意做出的决定。 许多人不喜欢运算符超载(指向C ++,这些东西经常被滥用)。 所以有人认为Java不应该允许它。

如果你主要关心的是使用*而不是乘法; 有很多其他的语言运行在JVM(例如Scala),给你操作符重载(但说实话:Scala没有运算符重载,但它允许你命名你的方法“*”)。

简单地说:你不能。

Java不支持操作数重载。 在支持它的JVM(groovy,kotlin和scala)上还有其他语言,但是最终它们和第二个例子一样。

详细说明:Java Spec表不包含任何操作符重载(例如, https : //docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.17 )

Interesting Posts