2012-01-17 106 views
5

我的工作是有一个叫做Vector2Java是否支持运算符重载?

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

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

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

4

Java不允许像C++这样的语言重载操作符。请参阅this article。制作实用功能以适应您想要完成的任务。

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

正如纳迪尔说,这就是所谓的“运算符重载”和(或好或坏),它不包含在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