我有一个名为Vector2的简单类,它几乎就是:
class Vector2 {
public int x, y;
public Vector2(int x, int y) {
this.x = x;
this.y = y;
}
}
使用某些方法等,我希望能够做到:
Vector2 myVector = new Vector2(2, 1);
myVector *= 2;
和myVector将是(4,2)。
这可能吗?我需要在课堂上添加什么?
答案 0 :(得分:4)
*
这可能吗?
没有。不是Java。其他语言如C ++支持。称为运算符重载,因为您重新定义了myVector.multiplyBy( 2 )
- 运算符所执行的操作。
在Java中,您必须使用显式方法。像
class Vector2 {
public int x, y;
public Vector2(int x, int y) {
this.x = x;
this.y = y;
}
public void multiplyBy(int value) {
this.x *= value;
this.y *= value;
}
}
它看起来像
public Vector2 multiplyBy(int value) {
return new Vector2(this.x * value, this.y * value);
}
或喜欢
Vector2 myMultipliedVector = myVector.multiplyBy( 2 );
然后你会做
someObject *= 2
的优点是您不会修改原始对象,而是创建一个具有不同值的新对象。
Groovy(源自Java并在JVM上运行的语言)采用了这个想法,并且实际上允许您编写multiply
,只要您提供必须被调用的方法{{1} }}。也许有一天会把它变成Java。 Maybe not。但基本上所有合法的Java代码也是合法的Groovy代码,所以你现在可以在一个看起来像Java的程序中运行,并在Java VM中运行。