¿Cómo obtener un tipo genérico que está definido en un método en Java?
Pregunta 1:
¿Puedo obtener el tipo “String” en “methodA” sin pasar realmente “String” a él?
Pregunta 2:
Me refiero a que lo que se pasó a “methodA” ya no es un objeto simple sino una expresión lambda, también, ¿puedo obtener el tipo “String” en “methodA”?
davy.ai
Respuesta 1:
No, no puedes obtener el tipo
String
enmethodA
sin pasar explícitamenteString
como argumento. Cuando pasas un argumento genérico<string>
amethodA
, solo especifica el tipo del argumentoreq
, no el tipo dereq
en sí.req
podría ser cualquier objeto de tipoT
, por lo quemethodA
no puede asumir que es unString
. Necesitarías pasar explícitamente un objetoString
para poder trabajar con su tipo dentro demethodA
.Respuesta 2:
Sí, todavía puedes obtener el tipo
String
enmethodA
, aunque se pase una expresión lambda como argumento. La expresión lambdaitem -> "hello world".equals(item)
es de tipoPredicate<string>
, por lo que el tipo genéricoT
demethodA
se infiere comoString
. Esto se debe a que la interfazPredicate
tiene un parámetro genéricoT
que se resuelve comoString
por la expresión lambda. Por lo tanto, puedes trabajar con el tipoString
dentro demethodA
basándote en la inferencia de la expresión lambda pasada a ella.