2010-03-11 8 views
5

Warum wurde Java so definiert, dass Methoden als Eingabe mehrere Parameter annehmen können,
, aber nur ein einzelnes Objekt (oder void) zurückgeben kann?Warum Java mehrere Parameter annehmen kann, aber nur ein einzelnes Objekt zurückgeben kann?

Hat es die Sprache irgendwie einfacher zu implementieren oder zu verwenden?

+0

Es bietet auch keine Lösungen für eine effiziente Möglichkeit, mehrere Argumente zurückzugeben. Wenn ich möchte, dass eine Methode ein Argument zurückgeben kann, übergebe ich ein zwischengespeichertes Array (Länge 1) des erforderlichen Typs als Argument und lasse es das erste Feld setzen, alternativ könnten Sie ein Objekt-Array und zurückgeben benutze das, aber seine unnötige Objekterzeugung, die du vermeiden willst. –

Antwort

5

Wahrscheinlich, weil dies die Art ist, wie C und C++ es tun, und die Syntax der Java-Sprache diesen Sprachen sehr ähnlich ist (und wahrscheinlich darauf basiert).

In der Tat, nach this article begann Gosling durch den C++ Compiler erstreckt, so macht es Sinn, dass er viel von der gleichen Syntax folgen würde:

Um Entwicklung eines plattformneutrale Prozess (und Damit wird dem Bedarf des Verbrauchermarkts nach CPU-Flexibilität Rechnung getragen. Gosling begann mit der Erweiterung des C++ - Compilers.

5

Vielleicht sollten mehrere Rückgabewerte in einem Objekt eingekapselt sein?

+0

Bedenken Sie, dass Objekte als Referenz übergeben werden. – Paul

0

Meine Vermutung wäre Konvention: das ist, was die wichtigsten OO-Sprachen tun/taten, also ist das, was Java tat. Das offizielle Argument würde jedoch wahrscheinlich das gleiche wie das von Closures sein - schließen Sie keine Dinge ein, die die Standardsyntax für alltägliche Aufgaben mit nicht wirklich benötigten Aufgaben verdunkeln. Oder vielleicht dachten sie, dass eine einzelne Methode einen Satz verwandter Werte zurückgeben sollte, die in ein Objekt passen sollten/könnten. Oder vielleicht haben sie einfach nicht daran gedacht/haben die Zeit (ziemlich Standard-Entwickler-Tarif).

über einen entsprechenden Hinweis, fand ich diese Diskussion Schließungen der Verwendung mehrere kehrt zu verspotten: http://weblogs.java.net/blog/brucechapman/archive/2007/11/closures_and_mu.html

4

ich sicher weiß es nicht, aber ich glaube, dass Java wie jede andere Stack-basierte Laufzeit ausgeführt wird. Das bedeutet, dass das Übergeben von Elementen als Parameter an eine Methode einfach durchgeführt werden kann, indem sie einfach auf den Stapel geschoben werden, bevor die Kontrolle an die Methode übergeben wird. Rückgabewerte werden wahrscheinlich in der VM wie C und C++ behandelt - der Rückgabewert wird immer in einem Register platziert, das von Natur aus einwertig ist.

Es ist jedoch kein großes Problem, denn mit Generics kann die Rückgabe mehrerer Werte typsicher gehandhabt werden, indem eine Instanz von etwa Tuple<type1, type2, type3> zurückgegeben wird, was in den meisten Fällen keine allzu große Last ist .

Verwandte Themen