que promocionado objeto nombre inner columna campos ambiguos ambiguo ambiguedad ambigua java java-8

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:

  1. usa una expresión lambda:

    Stream.of(1, 32, 12, 15, 23).map(i->Integer.toString(i));

  2. (Preferido, al menos por mí) Utilice una secuencia de valores primitivos int cuando la fuente consta únicamente de valores int primitivos:

    IntStream.of(1, 32, 12, 15, 23).mapToObj(Integer::toString);

    Esto usará el método estático Integer.toString(int) para consumir los valores int .


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