Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

229
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda