Rückgabewert Optional Getter

bugbunny

Mitglied
Hallo, ich habe bei meiner Hausaufgabe ein Problem.
Die Vorgabe lautet für die Klasse lautet:
"Wenn zuvor kein Wert gesetzt wurde, sollte die Methode ein leeres Optional zurückgeben."
Mein Testergebnis lautet: "] expected:<Optional[.empty]> but was:<Optional[[0]]>"
Java:
public Optional<Temporal> getDate()
{
    return Optional.ofNullable( date );
}

Nun ist mir nicht ganz klar wie ich das machen kann, ich wollte bspw. mit .isPresent prüfen ob Werte vorhanden sind, wenn ja diese ausgeben, wenn nicht ein leeres, allerdings hat das nicht funktioniert.
Deshalb die Frage: Gibt es dafür eine einfache Möglichkeit?

Freue mich über jede Unterstützung.

Grüße Leonie
 

mrBrown

Super-Moderator
Mitarbeiter
Was für ein Typ ist denn date?

Mit dem Optional musst du selber nichts machen, du brauchst auch kein isPresent oder ähnliches.
Du musst nur abhängig von date das passende zurückgeben - entweder eben das gefüllte Optional oder ein leeres.
Wenn date null wäre, sollte deine Methode korrekt arbeiten, es sieht aber danach aus, als wäre es nicht null sondern irgendwas anderes
 

bugbunny

Mitglied
Danke für die schnelle Antwort, date ist der Typ Termporal, ich habe aber noch weiter Methoden mit anderen Typen die nach dem gleichen Prinzip funktionieren sollen.
Damit habe ich den Test bestanden:
Java:
if (date==null)
{
    return Optional.empty();
}
return Optional.ofNullable( date);
Bei den anderen Methoden werden aber int übergeben, aber die kann ich ja nicht auf null prüfen?
 

mrBrown

Super-Moderator
Mitarbeiter
Danke für die schnelle Antwort, date ist der Typ Termporal, ich habe aber noch weiter Methoden mit anderen Typen die nach dem gleichen Prinzip funktionieren sollen.ll-Test auch gemacht
Damit habe ich den Test bestanden:
Java:
if (date==null)
{
    return Optional.empty();
}
return Optional.ofNullable( date);
Wenn das Funktioniert, reicht aber auch return Optional.ofNullable( date) - darin wird der null-Test auch gemacht.

Bei den anderen Methoden werden aber int übergeben, aber die kann ich ja nicht auf null prüfen?
Wann gilt denn der int als gesetzt? Einen Wert hat er ja immer...
uU macht da die interne Verwendung von Integer Sinn
 

bugbunny

Mitglied
Wenn das Funktioniert hat gesagt.:
bin ich auch von ausgegangen, wurde aber nicht akzeptiert.

Wann gilt denn der int als gesetzt? Einen Wert hat er ja immer... uU macht da die interne Verwendung von Integer Sinn [/QUOTE hat gesagt.:
das optional ist vom Typ Integer, die dazugehörigen Setter bekommen ein int.

public Optional<Integer> getId()

Ich denke mal int gilt als gesetzt, wenn die Id über den Konstruktor initialisiert wird, die Angabe der id ist ja optional.
Aber auch hier ist mit nur retun Optional.ofNullable( id)
die gleiche Meldung, erwartet wurde empty, tatsächlich ist es 0
 

mrBrown

Super-Moderator
Mitarbeiter
bin ich auch von ausgegangen, wurde aber nicht akzeptiert.
Von wem nicht akzeptiert? Es ist ja im Ergebniss das gleiche...


das optional ist vom Typ Integer, die dazugehörigen Setter bekommen ein int.

public Optional<Integer> getId()

Ich denke mal int gilt als gesetzt, wenn die Id über den Konstruktor initialisiert wird, die Angabe der id ist ja optional.
Aber auch hier ist mit nur retun Optional.ofNullable( id)
die gleiche Meldung, erwartet wurde empty, tatsächlich ist es 0
Relevant ist der Typ, den die InstanzVariable hat.
Wenn das int ist, ist es immer gesetzt (außer man definiert einen Wert als „nicht gesetzt“) und man muss „drum herum bauen“, ist es Integer, ist auch null und damit „nicht gesetzt“ möglich.
 

bugbunny

Mitglied
Von wem nicht akzeptiert? Es ist ja im Ergebniss das gleiche...



Relevant ist der Typ, den die InstanzVariable hat.
Wenn das int ist, ist es immer gesetzt (außer man definiert einen Wert als „nicht gesetzt“) und man muss „drum herum bauen“, ist es Integer, ist auch null und damit „nicht gesetzt“ möglich.

Wir haben eine Testumgebung in die wir unseren Code hochladen können, da wurde ohne
if (date==null)
{ return Optional.empty();

eine Fehlermeldung ausgegeben.

Id ist ein int und auch dort kommt als Testergebnis mit return Optional.ofNullable(id):
"Wenn zuvor kein Wert gesetzt wurde, sollte die Methode getId() ein leeres Optional zurückgeben.] expected:<Optional[.empty]> but was:<Optional[[0]]>"
 

mrBrown

Super-Moderator
Mitarbeiter
Wir haben eine Testumgebung in die wir unseren Code hochladen können, da wurde ohne
if (date==null)
{ return Optional.empty();

eine Fehlermeldung ausgegeben.
Das ist merkwürdig...Vorallem auch die Ausgabe dazu, die du oben gepostet hattest...
Id ist ein int und auch dort kommt als Testergebnis mit return Optional.ofNullable(id):
"Wenn zuvor kein Wert gesetzt wurde, sollte die Methode getId() ein leeres Optional zurückgeben.] expected:<Optional[.empty]> but was:<Optional[[0]]>"
der int hat als Default-Wert 0 und ist niemals null - ofNullable kann also niemals empty zurückgeben.

Du musst also entweder auf 0 prüfen, dann darf aber 0 kein valider Wert sein, oder dir eine andere Möglichkeit zum erkennen des Gesetzen Wertes überlegen
 

Neue Themen


Oben