Při porovnávání Optional není nutné kontrolovat isPresent a volat hodnotu, ale jde rovnou porovnánat objekty.
Optional<Long> emptyLong = Optional.empty(); Optional<Long> l1 = Optional.of(1L); Optional<String> s1 = Optional.of("abc"); System.out.println(emptyLong.equals(l1)); System.out.println(emptyLong.equals(Optional.empty())); System.out.println(l1.equals(s1)); System.out.println(s1.equals(Optional.of("abc")));
Výsledek
false true false true
Stejné to je v testech (např. při použití testNG):
assertNotEquals(emptyLong, l1); assertEquals(emptyLong, Optional.empty()); assertNotEquals(l1, s1); assertEquals(s1, Optional.of("abc"));
Takto asserty projdou. Pokud bychom to změnili např. na assertEquals(emptyLong, l1), dostali bychom následující chybu:
Exception in thread "main" java.lang.AssertionError: expected [Optional[1]] but found [Optional.empty] at org.testng.Assert.fail(Assert.java:93) at org.testng.Assert.failNotEquals(Assert.java:512) at org.testng.Assert.assertEqualsImpl(Assert.java:134) at org.testng.Assert.assertEquals(Assert.java:115) at org.testng.Assert.assertEquals(Assert.java:178) at ...