java - promocionado - ¿Cómo arreglar el tipo ambiguo en la referencia del método(toString of an Integer)?
la columna en field list es ambigua (3)
Dado que Integer.toString()
anula Object.toString()
, en este caso particular puede corregirlo de la siguiente manera:
Stream.of(1, 32, 12, 15, 23).map(Object::toString);
Al hacer esto
Stream.of(1, 32, 12, 15, 23).map(Integer::toString);
Obtengo un error de tipo ambiguo. Es comprensible que el compilador no pueda decir si me refiero a toString(int)
o toString()
desde Integer
.
Cuando no utilizo una referencia de método, podría haber salido de esto con un molde explícito o escribir la mano larga de genéricos, pero ¿cómo puedo dejar que el compilador sepa lo que quiero decir aquí ? ¿Qué sintaxis (si hay alguna) puedo usar para hacer inequívoca?
No hay forma de hacer que las referencias a los métodos sean inequívocas; simplemente dicho, las referencias de método son una característica que solo se admite para referencias de método inequívocas. Entonces tienes dos soluciones:
usa una expresión lambda:
Stream.of(1, 32, 12, 15, 23).map(i->Integer.toString(i));
(Preferido, al menos por mí) Utilice una secuencia de valores primitivos
int
cuando la fuente consta únicamente de valoresint
primitivos:IntStream.of(1, 32, 12, 15, 23).mapToObj(Integer::toString);
Esto usará el método estático
Integer.toString(int)
para consumir los valoresint
.
Sus principales opciones, utilizando referencias de métodos, son:
Stream.of(1, 32, 12, 15, 23).map(String::valueOf);
IntStream.of(1, 32, 12, 15, 23).mapToObj(Integer::toString);
Su versión actual podría significar i -> i.toString()
o i -> Integer.toString(i)
.