Warum gibt es in Java keine Operatorüberladung?

Hallo liebe Community,

meine folgende frage ist eine reine Verständnisfrage. Ich frage mich zur zeit warum es in Java keine Operatorüberladungen gibt? Denn überall liest man das Java dies nicht unterstützt aber WARUM(?) steht nirgends, daher wende ich mich vertrauensvoll an Euch :slight_smile:

Da ich derzeit ein Projekt entwickle in dem ich eigene 2D-Vector und Matrizen implementiere bin ich nun an diesen Punkt gestoßen wo es mir nicht ganz klar wird was dahinter steckt. Will Sun das entwickeln eigener Datentypen, mit den man einfache arithmetische/logische Operationen durchführen kann, nicht unterstützen? Hat Sun es bei der Entwicklung von Java vielleicht nur „vergessen“ und führt es dennoch nicht ein um beim Ursprung zu bleiben?

Ich mein, es wird doch keine grundlegende Änderung der Sprache nach sich ziehen, das einzige wäre imho im Compiler etwas einzubauen was solche operationen und die in der Klasse definierten Methoden umzuschreiben und so wieder beim alten zu landen.

Kleines Verständnisbeispiel:

public class Typ
{
    private int m_v1;
    private int m_v2;

    public void operator+=( Typ t ) {
        this.m_v1 += t.getV1();
        this.m_v2 += t.getV2();
    }
}

// Bsp des Aufrufes

Typ t1 = new Typ( 2, 3 );
Typ t2 = new Typ( 4, 5 );
t1 += t2;

Das könnte doch imho der Compiler dann folgend umschreiben:

// umgeschriebene Klasse
public class Typ
{
    private int m_v1;
    private int m_v2;

    public void operator_add( Typ t ) {
        this.m_v1 += t.getV1();
        this.m_v2 += t.getV2();
    }
}

// umgeschriebener Aufruf

Typ t1 = new Typ( 2, 3 );
Typ t2 = new Typ( 4, 5 );
t1.operator_add( t2 );

Warum geht das nicht? Bzw warum hat Sun das nie vorgesehen? Hoffe ihr könnt mir diese Frage beantworten, vllt sogar mit einer Begründung warum? :slight_smile:

Gut Schuß
VuuRWerK :wink:

Das wurde schon öfter diskutiert:
http://forum.java.sun.com/thread.jspa?threadID=624342&messageID=3549962

Hm, aber nur weil man davon ausgeht das in Java nur wenige Anwendungen entwickelt werden die in Richtung Mathematik gehen oder man Operatorüberladung nur selten braucht es gleich gänzlich wegzulassen find ich, in einer ObjektOrientierten Sprache, irgendwie „doof“. Gerade jetzt wo ich die Geschichte mit Vektoren und Matrizen umsetze fällt es mir eben auf. Ok natürlich habe ich die äquivalenten Methoden geschrieben um zu operieren, dennoch fände ich eine Operatorüberladung in Java passend.

Naja gut, dann bleibt es eben bei den Methoden und verzichte auf das „Eye-Candy“ der Operatorüberladungen :slight_smile:

Gut Schuß
VuuRWerK :wink:

Klingt doch dann ganz verlockend, noch mehr Operatoren zu überladen. Und dann steht da im Code

t1 *= t2

… und irgendjemand will deinen Code dann lesen. Hmm. Ist das jetzt das Skalarprodukt, das Kreuzprodukt, oder was ganz anderes?

(Nur als ein Beispiel dafür, wie leicht Operatorüberladung unübersichtlich wird. Generell hätte ich aber auch nichts dagegen, zumindest wenn es (wie in .net oder so) im Rahmen bleibt und Beschränkungen unterliegt. Dass der Code schön wird ist ja immer noch mal eine ganz andere Sache.)