JavaRush /Java-Blog /Random-DE /Gibt ein Array der Länge Null zurück, nicht null
alexnjc
Level 31

Gibt ein Array der Länge Null zurück, nicht null

Veröffentlicht in der Gruppe Random-DE
Oftmals gibt es Methoden, die so aussehen:
private List cheesesInStock =;
/**
* @return массив, содержащий все сыры, имеющиеся в магазине,
* oder null, если сыров для продажи нет.
*/
public Cheese[] getCheeses() {
if (cheesesInStock.size() == 0)
return null;
}
Es gibt keinen Grund, eine Situation, in der kein Käse zum Verkauf steht, als Sonderfall zu behandeln. Dazu muss der Client zusätzlichen Code schreiben, um den Rückgabewert der Methode zu verarbeiten пull, zum Beispiel:
Cheese[] cheeses = shop.getCheeses();
if (cheeses ! = пull &&
Аrrауs.аsList(shор.gеtСhееsеs()).соntаins(Сhееsе.SТILТON))
Sуstеm.оut.рrintln("Jоllу good, just the thing.");
statt einfach:
if  (Аrrаys.аsList(shор.gеtСhееsеs()).соntаins(Сhееsе.SТILTON)) Sуstеm.оut.рrintln("Jоllу good, just the thing.");
Diese Art der Ausführlichkeit ist für fast jeden Methodenaufruf erforderlich, der null anstelle eines Arrays der Länge Null zurückgibt. Dies ist fehlerbehaftet, da der Client-Entwickler möglicherweise keinen speziellen Code zur Verarbeitung des Ergebnisses geschrieben hat null. Der Fehler kann jahrelang unentdeckt bleiben, da solche Methoden normalerweise ein oder mehrere Objekte zurückgeben. Es sollte auch erwähnt werden, dass die Rückgabe nullanstelle eines Arrays zu einer Komplikation der Methode selbst führt, die das Array zurückgibt. Es wird manchmal argumentiert, dass die Rückgabe von Null der Rückgabe eines Arrays mit der Länge Null vorzuziehen ist, da dadurch die Kosten für die Zuweisung des Arrays im Speicher vermieden werden. Dieses Argument scheitert aus zwei Gründen. Erstens macht es keinen Sinn, sich auf dieser Ebene Gedanken über die Leistung zu machen, es sei denn, die Profilerstellung des Programms zeigt, dass diese spezielle Methode der Hauptgrund für den Leistungsabfall ist. Zweitens kann jeder Aufruf einer Methode, die keine Datensätze zurückgibt, dasselbe Array mit der Länge Null an den Client übergeben, da jedes Array mit der Länge Null unveränderlich ist und unveränderliche Objekte gemeinsam genutzt werden können. Tatsächlich passiert genau das, wenn Sie die Standardsprache zum Speichern von Elementen aus einer Sammlung in einem typgesteuerten Array verwenden:
private List сhееsеsInStосk =,
private fiпаl static Cheese[] NULL_CHEESE_ARRAY = nеw Cheese[0];
 /**
* @геtuгп массие, содержащий все сыры, имеющиеся в магазине
*/
public Cheese[] getCheeses() {
геtuгп (Cheese[] сhееsеsInStосk.tоАггау(NULL_СНЕЕSЕ_АRRАУ);
}
In dieser Redewendung wird eine Konstante als Array der Länge Null an eine Methode übergeben, toArrayum anzugeben, welchen Typ sie zurückgeben soll. Normalerweise toArrayweist die Methode Speicherplatz für das zurückgegebene Array zu. Wenn die Sammlung jedoch leer ist, wird sie im Eingabearray platziert, und die Spezifikation Сollесtion,tоАггау(Оbjесt[])stellt sicher, dass, wenn das Eingabearray groß genug ist, um die Sammlung aufzunehmen, auch diese zurückgegeben wird. Daher wird die vorgestellte Redewendung niemals selbst ein Array mit der Länge Null im Speicher allozieren, sondern eine „typspezifische Konstante“ als solche verwenden. Fassen wir zusammen. Es gibt keinen Grund dafür, dass eine Array-Methode NULL anstelle eines Arrays der Länge Null zurückgibt. Diese Redewendung scheint aus der Programmiersprache C zu stammen, wo die Länge eines Arrays getrennt vom Array selbst zurückgegeben wird. In C ist es sinnlos, Speicher für ein Array der Länge Null zu reservieren. Quelle: Joshua Bloch, Java TM Effective Programming, Lori Publishing House
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION