2012-01-17 11 views
5

Sto lavorando su un progetto che ha un oggetto chiamato Vector2Java supporta l'overloading dell'operatore?

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)); 
     } 
    } 

e vorrebbe effettuare le seguenti operazioni:

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 

è possibile? In tal caso, come posso farlo e come si chiama? Grazie in anticipo.

risposta

5

No, Java non supporta l'overloading dell'operatore.

Come una FYI: se è possibile lavorare con altri linguaggi, allora C++ e, come Java, C# supportano l'overloading degli operatori. Se il tuo progetto, ad esempio Ray Tracing, ha molte operazioni relative ai vettori, allora prenderei in considerazione un linguaggio come C#.

4

Java non consente il sovraccarico dell'operatore come lingue come C++. Vedi this article. Fai funzioni di utilità per accogliere ciò che vuoi realizzare.

4

Non c'è sovraccarico dell'operatore in Java. Il meglio che puoi fare è usare un metodo.

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

Poi, se a e b sono Vector2 oggetti si può fare questo

Vector2 c = a.multiply(b); 
1

Come ha detto Nadir, si chiama "l'overloading degli operatori" e (bene o male) non è stato incluso nel Java specifica. Puoi trovarlo in C++ se vuoi vederlo in azione.

In Java, avresti bisogno di aggiungere i seguenti metodi per la classe Vector2:

public Vector2 multiplyBy(Vector2 otherVector); 

public Vector2 multiplyBy(float multiplier); 
1

Quello che state facendo è chiamato overloading degli operatori. E mentre Java non lo supporta (Google per trovare una miriade di post e opinioni sull'argomento), alcuni linguaggi di livello superiore eseguiti sulla JVM lo fanno, come Groovy. Quindi, se sei in grado di introdurre Groovy nel tuo progetto, puoi farlo. Il tuo codice Groovy verrà compilato nello stesso bytecode JVM, quindi sarà completamente interoperabile con il tuo Java e può chiamare Java esistente nel tuo progetto.

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