Java 8 Lambda encadenamiento - Tipo de Aplicación de Seguridad

karthick:

Fragmento 1:

Optional.of(s).map(str -> str).orElse("");

Fragmento 2:

Optional.of(s).map(str -> str).orElse(Optional.empty());

Fragmento 3:

Optional.of(s).map(str -> Optional.of(str)).orElse("hello");

Snippet 1está bien, pero la compilación Snippet 2y Snippet 3compilación de errores tipo de incompatibilidad. Si bien es bueno que Snippet 2y Snippet 3fallar, no entiendo como son evaluados. En otras palabras, creo que me faltan algunos conceptos básicos en términos de cómo los propios lambdas están encadenados / invocado. Agradecería si alguien puede ayudar.

Ousmane D .:

Fragmento 1:

Optional.of(s).map(str -> str).orElse("");

Compila porque el valor predeterminado proporcionado a es del mismo tipo como el valor de la contiene es decir, una .orElse OptionalString

Fragmento 2:

Optional.of(s).map(str -> str).orElse(Optional.empty());

no se compila porque después mapusted tiene un Optional<String>pero entonces usted está proporcionando una Optional<String>en el orElsemientras que debería ser una String.

Fragmento 3:

Optional.of(s).map(str -> Optional.of(str)).orElse("hello");

no se compila porque después mapusted tiene un Optional<Optional<String>>pero estás pasando una Stringen la orElseque es conveniente prever una Optional<String>.

Para concluir orElseestá declarada como:

T pública OrElse (T otra)

y documentado como:

Devuelve el valor si está presente, de lo contrario devuelve otros.

es decir, orElsebásicamente dice "dame el valor opcional contiene si está presente lo contrario toma el valor por defecto", así como que Tdeben ser del mismo tipo que el valor de la Optionalcontiene.

por lo que si usted tiene un Optional<Stringentonces usted debe suministrar una Stringa orElse, si tiene un Optional<Integerentonces usted debe suministrar una Integera orElseetc ...


Por otro lado, la mapfunción en su primera y segunda ejemplo fragmentos son superfluas y puede, por lo tanto, omitir por completo.

Cada vez que vea a su propia vocación Optional#mapcon la función que v -> ves probable que no sea necesario.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=167500&siteId=1
Recomendado
Clasificación