Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

205
Views
¿Por qué el uso de una referencia de método en lugar de un lamda da como resultado un error de compilación en este caso?

Tengo el siguiente código:

 final var fieldValuesStream = items.stream() .map(person -> PersonFieldGetter.getFieldValueAsNumber(functionsParameters.getFieldName(), person)) // Number .mapToDouble(number -> number.doubleValue());

IDEA resalta "número -> número.doubleValue()" con el mensaje:

Lambda se puede reemplazar con la referencia del método
Reemplace Lamda con la referencia del método

Pero cuando cambio el código a .mapToDouble(Number::doubleValue) ocurre un error de compilación:

QueryProcessor.java:31:34 java: tipos incompatibles: método de referencia de método no válido doubleValue en la clase java.lang.Number no se puede aplicar a los tipos dados requerido: no se encontraron argumentos: java.lang.Object razón: las listas de argumentos reales y formales difieren en largo

código fuente completo
¿Por qué está pasando esto?

Proyecto para reproducir el problema

EDITAR: Se agregó un enlace al proyecto de GitHub con un proyecto de ejemplo que no se puede compilar usando:

IntelliJ IDEA 2021.2.3 (última edición)
Compilación n.º IU-212.5457.46, compilada el 12 de octubre de 2021
Versión de tiempo de ejecución: 11.0.12+7-b1504.40 amd64
Máquina virtual: máquina virtual de servidor OpenJDK de 64 bits de JetBrains sro
SDK: Oracle OpenJDK 17.0.1

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

No es una respuesta, con el objetivo de proporcionar un ejemplo reproducible simplificado para que otros resuelvan el problema.

 import java.util.List; public class Main { public static void main(String[] args) { List.of(0.1d).stream().map(aDouble -> { return List.of(1).stream().map(p -> aDouble).mapToDouble(Number::doubleValue); } ); } }

Parece que el problema es que el compilador no puede reconocer el tipo de aDouble en el flujo anidado y causa un error extraño.

Alguna forma de hacer que se compile

  1. Quitar devolución
 Stream.of(0.1d).map(aDouble -> List.of(1).stream().map(p -> aDouble).mapToDouble(Double::doubleValue) );
  1. Especifique el tipo de aDouble
 Stream.of(0.1d).map((Double aDouble) -> { return List.of(1).stream().map(p -> aDouble).mapToDouble(Double::doubleValue); } );
  1. No usar referencia de método
 Stream.of(0.1d).map(aDouble -> { return List.of(1).stream().map(p -> aDouble).mapToDouble(d -> d.doubleValue()); } );
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!