Java支持运算符重载吗?

5
我正在处理一个项目,其中有一个叫做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个回答

5

不,Java不支持运算符重载。

顺便说一下:如果您可以使用其他语言,那么C++和非常类似Java的C#支持运算符重载。如果您的项目(例如Ray Tracing)涉及大量矢量相关操作,则我实际上会考虑像C#这样的语言。


4

Java不允许像C++这样的语言那样进行运算符重载。请参阅这篇文章。可以创建实用函数以实现您想要完成的操作。


4

Java中不存在运算符重载。你可以使用方法来实现类似于运算符重载的功能。

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

如果abVector2对象,那么您可以这样做

Vector2 c = a.multiply(b);

1
正如Nadir所说,这被称为"运算符重载",不管是好是坏,它并没有包含在Java规范中。如果你想看它的实际应用,你可以在C++中找到它。
在Java中,你需要在你的Vector2类中添加以下方法:
public Vector2 multiplyBy(Vector2 otherVector);

public Vector2 multiplyBy(float multiplier);

1
你正在做的是运算符重载,虽然Java不支持它(谷歌上会有无数关于这个主题的帖子和意见),但一些运行在JVM上的高级语言,如Groovy,支持它。如果你能将Groovy引入项目中,就可以完成这个任务。你的Groovy代码将被编译成相同的JVM字节码,因此与你的Java完全兼容,并且可以调用你项目中现有的Java。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接