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

226
Views
¿Por qué javac no produce una advertencia cuando se usa un constructor en desuso de un tipo parametrizado?

Supongamos que tiene una clase parametrizada con un constructor en desuso y una clase User que llama a este constructor. En el siguiente ejemplo, usando el operador de diamante, javac (versión 11.0.11) no produce una advertencia de obsolescencia:

 class DepTester<T> { T t; @Deprecated public DepTester(T t) { this.t = t; } } class User { DepTester<String> tester = new DepTester<>("This does not produce a warning!"); }

Sin embargo, con un argumento de tipo explícito en la llamada al constructor, se emite la advertencia:

 class User { DepTester<String> tester = new DepTester<String>("This produces a warning."); } [WARNING] DepTester.java:[17,40] DepTester(T) in com.foo.DepTester has been deprecated

El argumento de tipo explícito normalmente no se incluye, sobre lo cual la inspección de IntelliJ también advierte:

Argumento de tipo explícito La cadena se puede reemplazar con <>

No puedo encontrar una explicación para este comportamiento en la especificación del lenguaje Java . Probé con javac 17, y produce una advertencia en ambos casos, ¿es esto un error en javac 11?

EDITAR: A mi informe de errores para Oracle se le asignó un ID en la base de datos de errores de Java: JDK-8281107

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Encontró el error JDK-8257037 , "No hay advertencia de javac al llamar al constructor obsoleto con diamante":

No se emite ninguna advertencia de desaprobación cuando se compila una clase que llama a un constructor obsoleto cuando se usa la sintaxis de diamante para especificar los tipos genéricos. Se emite una advertencia de desaprobación cuando se llama al mismo constructor usando un argumento de tipo explícito o un tipo sin procesar.

Se ha solucionado con JDK 17.
También hay un backport informado para JDK 16 , pero ninguno para versiones anteriores.

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!