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

334
Views
Kotlin no identifica las palabras clave reservadas de Java

Tengo un problema con el uso de palabras clave reservadas de Java en Kotlin. Como no todas las palabras clave reservadas están disponibles en Kotlin, el compilador de Kotlin no puede (¿o no?) detectar las palabras clave reservadas que solo están en Java.

Por ejemplo, tome el ejemplo de default . Es una palabra clave reservada de Java. Eso significa que no puedes hacer lo siguiente.

 public class UserJava { public String default; }

Sin embargo, NO es una palabra clave reservada en Kotlin, por lo que puede usarla de la siguiente manera

 class UserKotlin { var default: String? = null }

Para alguien que no conoce Java, sería difícil saber que son palabras clave reservadas. Como el compilador de Kotlin no le da un error, ni ningún tipo de advertencia de que está usando una palabra clave reservada, puede causar algunos problemas más adelante, que no esperaría.

Uno de los problemas que puede encontrar es durante AnnotationProcessing , que son las bibliotecas que incluye en su gradle con kapt o annotationProcessor . Como Kotlin usa el compilador de Java cuando, por ejemplo, intenta obtener los campos de la clase UserKotlin , obtendrá una lista vacía ya que el compilador de Java NO "entiende" el campo default y lo ignora (¿lo salta?).

El ejemplo de la vida real sería si usa la biblioteca Room y tiene una entidad como la siguiente

 @Entity class User{ @PrimaryKey var id: Int = 0 var default: String? = null }

El procesador de anotaciones de habitaciones generará una consulta de creación de SQLite de

 CREATE TABLE IF NOT EXISTS `User` (`id` INTEGER NOT NULL, PRIMARY KEY(`id`))

Entonces, básicamente omitió el campo default .

¿Hay alguna forma de que Kotlin avise cuando intento usar palabras clave reservadas de Java? ¿O es un error en Kotlin que aún no se ha solucionado? O hay alguna documentación que menciona este problema.

Si conozco Java, es posible que me muestre reticente a usar palabras clave, ya que sé que están reservadas en Java. Pero, ¿qué pasa si no sé Java y no puedo entender cuál es el problema?

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Sinceramente, dudo que este sea un problema dentro de la JVM, pero con la biblioteca de anotaciones. Kotlin no expone la variable default ; lo que es público/expuesto son el getter y el setter. Dicho esto, tal vez la biblioteca de anotaciones esté tratando de acceder al campo privado directamente y termine sin encontrarlo porque es una palabra clave reservada y el compilador de Kotlin puede haberle dado un nombre diferente. ¿La biblioteca no da ninguna advertencia en tiempo de ejecución?

Dicho esto, kotlin planea extenderse a través de javascript/native, y con jvm convirtiéndose en solo parte de su imperio, no creo que tengan planes de agregar las advertencias sugeridas. Supongo que las bibliotecas tendrán que adaptarse a eso o perderán adeptos con el tiempo.

over 4 years ago · Santiago Trujillo Report

0

Android Lint ya tiene una regla opcional "No Hard Kotlin Keywords" que advierte cuando se usan palabras clave de Kotlin en código Java como identificadores, y su guía de interoperabilidad también advierte que no se usen estas palabras clave en código Java.

Lo mismo probablemente podría implementarse fácilmente al revés como una inspección en el propio complemento de Kotlin, idealmente desactivado de forma predeterminada porque la mayoría de las personas no lo necesitarán, pero aún así sería útil en algunos casos. Todavía no he encontrado un problema para esto en YouTrack , pero creo que sería razonable abrir uno.

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!