在java中将对象乘以整数?

时间:2015-11-18 02:36:27

标签: java object

我有一个名为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)。

这可能吗?我需要在课堂上添加什么?

1 个答案:

答案 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中运行。