Java - Get/set-Methoden, Empfang und Rückgabe "null"
Ich bin ein Anfänger in Java. Ich versuche, für die Ausbildung Zweck, zu bauen mich ein Schach-Spiel-Anwendung. Innerhalb meiner Klasse, welche verwendet werden, um instantiieren alle 64 Fälle von meinem board, ich Schreibe get/set-Methoden zu finden, wenn es ein Stück Insassen in den Instanzen der Fall ist.
Habe ich gelesen, dass die Rückgabe "null" ist eine schlechte Praxis, damit ich eine exception werfen, statt zu erklären, dass der Fall frei ist. Aber, ich Frage mich, wie die Insassen der Zeiger auf "null", kann ich drücken Sie einfach "null" als parameter auf, wenn ich diese Methode aufrufen?
Könnte auch unter/Rückgabe "null" sein, eine akzeptable/gute Praxis?
public Piece getOccupant(){
if (this.occupant == null)
throw new IllegalArgumentException(this.occupant + " is Empty");
return this.occupant;
}
public void setOccupant(Piece newOccupant){
this.occupant = newOccupant;
}
Dank!
[Update]
Danke an alle für Eure Kommentare, Anregungen, Ideen, Korrekturen und Empfehlungen. Hier ist die aktualisierte version von meinem code für das Teil, und ich fühle mich zufrieden, denn es erfüllt seinen Zweck (erhöhen mein Verständnis thru Praxis).
/*
* Modifiers of Occupant
*/
/**
* Used to find if a Piece is located in this Cell
* @return a Piece reference to the occupant. Will send a
* null pointer if cell is empty
*/
public Piece getOccupant(){
return this.occupant;
}
/**
* Used to set a new occupant in the Cell.
* @param newOccupant is a reference to a Piece instance,
* and should be set to null if the cell is emptied, or using
* the method clear().
*/
public void setOccupant(Piece newOccupant){
this.occupant = newOccupant;
}
/**
* Used to verify if a Cell is empty of any occupant
* @return true if cell is empty.
*/
public boolean isEmpty(){
if(this.occupant == null)
return true;
return false;
}
/**
* Free the cell of any occupant, if any were
*/
public void clear(){
this.occupant = null;
}
- Vielleicht bin ich falsch, aber ich sehe nicht ein, warum es schlecht wäre null zurück, in dieser situation, wenn die Zelle keine Insassen. 1+ für Ihren Wunsch, um besseren code zu schreiben!
- Vielleicht seine nur mich, aber das werfen einer IllegalArgumentException in eine Methode, die keine Argumente sind nicht geeignet.
- Bitte nicht über eine API, die null zurückgeben kann. Dies bedeutet, dass Sie brauchen, um zu überprüfen, jedes mal, wenn Sie es verwenden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen Platz auf der platine als unbesetzt ist nicht außergewöhnlich. Seine normale und wird immer wahr sein, damit die Mehrheit des Vorstands. Sie sollten nicht werfen Ausnahmen hier, Ausnahmen bestätigen die Regel soll nur ausgelöst werden, der für ein unerwartetes Ereignis, das bedeuten ein erhebliches problem mit dem, was Sie zu tun versuchen.
Können Sie sicherlich übergeben Sie null, um einen setter (außer für einen primitiven Typ wie int/long).
Könnte es besser sein, fügen Sie einige bequeme Methoden, eine Methode isEmpty, um Ihren Raum-Klasse:
und vielleicht auch eine clear-Methode
so dass Sie nicht haben, um zu testen, auf die Nichtigkeit des getter-Ergebnis, und Sie brauchen nicht zu übergeben Sie den Wert null zu setzen-dies hat die zusätzlichen Vorteile des seins leicht getestet werden, und erstellt eine API, die sinnvoll ist, um Ihren Raum Klasse.
Wenn Sie wollen, zu verbieten, null-Werte, sollte man es auf die setter-Methode:
Beachten Sie, dass einige Leute lieber zu IllegalArgumentException werfen. So oder so, der Punkt ist "fail fast", sobald jemand stellt einen unzulässigen Wert.
Nachdem alles gesagt, dass, ein Schachbrett, die sicherlich leere Positionen, so dass die null scheint mehr Sinn machen.
Empfehle ich dir "Effective Java 2nd Edition" von Josh Bloch.
Wo hast du gelesen, dass die Empfehlung? Meiner Meinung nach gibt es absolut nichts falsch über die Rückkehr
null
werden, vorausgesetzt, dassnull
vermittelt einige nützliche Informationen und kein Hinweis auf eine schwerwiegende Fehlerbedingung. In diesem Fall ist es vollkommen normal für ein Schach-Zelle, nicht enthalten, ein Stück, und ich würde auf jeden Fall erwartengetOccupant()
null zurück, in diesem Fall.Wenn der Anrufer ist sich bewusst, NULL-Werte zurückgeben, es ist nicht schlecht, um wieder NULL-Werte durch den angerufenen.
Statt null zurückgeben oder eine Ausnahme werfen soll, erstellen Sie eine Klasse "Leer", "None", "Void", so etwas wie, dass,, die Sie zuweisen würde, um Sie alle Ihren Fall, die leer sind.
kleine Anregung
keine Notwendigkeit von if-block können Sie den code vereinfachen, indem Sie einfach die Rücksendung der Ausgang des Ausdrucks