我正在开发一个名为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
这可能吗?如果是这样我怎么能这样做,它叫什么?提前谢谢。
答案 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);
}
如果a
和b
为Vector2
个对象,则可以执行此操作
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。