Frage

Wenn jemand meine Methode aufruft, möchte ich das Problem defensiv angehen.Normalerweise komme ich einfach zurück null.

Ich habe beschlossen, a zu implementieren try catch aber es sieht so aus, als würde ich einfach zurückkommen null Trotzdem.

Kann ich meine schreiben? try catch so, dass sie am Ende der Methode nicht zurückkehrt null?

Beispielcode, mit peek auf einer Stack-Klasse.

    public T peek()
    {
        T temp = null;

        try
        {
            temp = array[size]; 
        }

        catch(Exception e)
        {
        }

        return temp;
    }

Beim Aufruf mit leerem Stapel.Es wird zurückkehren null.

Also sollte ich mich überhaupt darum kümmern try catch für so einen Fall?Ich bin versucht, Folgendes zu tun:

if(isEmpty())
   return null;

Wenn der Stapel nicht leer ist, möchte ich das Element zurückgeben.Wenn der Stapel Ist empty kann ich dann vermeiden, null zurückzugeben, wenn ich das verwende try-catch?

War es hilfreich?

Lösung

Die Methode muss etwas zurückgeben oder eine Ausnahme auslösen.Wenn Sie einen unbegrenzten generischen Typ haben, können Dinge wie Nullobjektmuster nicht verwendet werden, sodass die Optionen zurückgegeben werden null, etwas zurückgeben, das enthält T wie Optional<T>, oder eine Ausnahme auslösen.

Wenn Ihnen die Sicherheit von nicht gefällt null, können Sie verwenden Optional, entweder aus Java 8 oder einer Bibliothek.Geprüfte Ausnahmen haben eine ähnliche Sicherheit, sind hier jedoch ungeeignet.

Andere Tipps

So würde ich das Problem angehen.Durch das Auslösen einer Ausnahme in der Peek-Funktion wird dem Aufrufer die Pflicht übertragen, diese Ausnahme zu behandeln.Warum?Weil ich möchte, dass ein Fehler eine möglichst große Explosion verursacht.Auch die Peek-Methode wurde kleiner.Wie Sie bereits zustimmen, ist die Rückgabe von null lahm.

public T peek() throws IndexOutOfBoundsException
{   
  return array[size]; 
}

Und

try
{
  T top = thestack.peek();
  /* Do something with that object */
}
catch(IndexOutOfBoundsException e)
{
  /* Do something else */
}

Das kann man sich kaum vorstellen array[size] Es wird eine Ausnahme ausgelöst, es sei denn, das Array ist null oder die Größe liegt außerhalb der Länge des Arrays.Sie könnten also so etwas tun:

 if (array != null && array.length > size) {
   return array[size - 1]; // assuming your size starts at 1
 }
 return null; // need to return something, if not null you need an option type.

Bearbeiten

Oder mit einem Möglichkeit Monade - und so etwas wie,

 if (array != null && array.length > size) {
   return new Some<T>(array[size - 1]); // assuming your size starts at 1
 }
 return new None<T>(); 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top