# Rückgabewert Optional Getter



## bugbunny (3. Mrz 2018)

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]]>"

```
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 (3. Mrz 2018)

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 (3. Mrz 2018)

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:

```
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 (3. Mrz 2018)

bugbunny hat gesagt.:


> 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:
> 
> ```
> ...


Wenn das Funktioniert, reicht aber auch return Optional.ofNullable( date) - darin wird der null-Test auch gemacht.



bugbunny hat gesagt.:


> 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 (3. Mrz 2018)

Wenn das Funktioniert hat gesagt.:
			
		

> bin ich auch von ausgegangen, wurde aber nicht akzeptiert.
> 
> 
> 
> ...


----------



## mrBrown (3. Mrz 2018)

bugbunny hat gesagt.:


> bin ich auch von ausgegangen, wurde aber nicht akzeptiert.


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




bugbunny hat gesagt.:


> das optional ist vom Typ Integer, die dazugehörigen Setter bekommen ein int.
> 
> public Optional<Integer> getId()
> 
> ...


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 (3. Mrz 2018)

mrBrown hat gesagt.:


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



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 (4. Mrz 2018)

bugbunny hat gesagt.:


> 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...


bugbunny hat gesagt.:


> 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


----------

