Java是否支持运算符重载?

时间:2012-01-17 01:31:15

标签: java object operator-keyword

我正在开发一个名为Vector2

的项目
public static class Vector2 {
        public Vector2 (float x, float y) {
            this.x = x;
            this.y = y;
        }

        public float x;
        public float y;

        public static Vector2 ZERO = new Vector2 (0, 0);
        public static Vector2 FORWARD = new Vector2 (0, 1);
        public static Vector2 LEFT = new Vector2 (1, 0);

        public static float Distance (Vector2 a, Vector2 b) {
            return (float) Math.sqrt(Math.pow(a.x - b.x, 2) + Math.pow(a.y - b.y, 2));
        }
    }

并希望执行以下操作:

Vector2 a = new Vector2 (2.32, 453.12);
Vector2 b = new Vector2 (35.32, 532.32);

Vector2 c = a * b;

// c.x = 2.32*35.32
// c.y = 453.12*532.32

float num = 5;
c = a * num;

// c.x = 2.32*5
// c.y = 453.12*5

这可能吗?如果是这样我怎么能这样做,它叫什么?提前谢谢。

5 个答案:

答案 0 :(得分:5)

不,Java不支持运营商重载。

作为一个FYI:如果您可以使用其他语言,那么C ++和非常类似的C#支持运算符重载。如果您的项目(例如Ray Tracing)有很多与矢量相关的操作,那么我实际上会考虑像C#这样的语言。

答案 1 :(得分:4)

Java不允许运算符重载像C ++这样的语言。见this article。使实用程序功能适应您想要完成的任务。

答案 2 :(得分:4)

Java中没有运算符重载。你能做的最好的就是使用一种方法。

public Vector2 multiply(Vector2 that){
    return new Vector2(this.x * that.x, this.y * that.y);
}

如果abVector2个对象,则可以执行此操作

Vector2 c = a.multiply(b);

答案 3 :(得分:1)

正如Nadir所说,它被称为“运算符重载”,并且(无论好坏)它都没有包含在Java规范中。如果你想看到它的实际效果,你可以用C ++找到它。

在Java中,您需要将以下方法添加到Vector2类:

public Vector2 multiplyBy(Vector2 otherVector);

public Vector2 multiplyBy(float multiplier);

答案 4 :(得分:1)

您正在做的事情称为运算符重载。虽然Java不支持它(谷歌在这个主题上找到了无数的帖子和意见),但是在JVM上运行的一些更高级别的语言就像Groovy一样。因此,如果您能够将Groovy引入项目中,您就可以实现这一目标。您的Groovy代码将编译为相同的JVM字节码,因此可以与Java完全互操作,并可以调用项目中的现有Java。

http://groovy.codehaus.org/Operator+Overloading