У меня проблема с использованием зарезервированных ключевых слов Java в Kotlin. Поскольку не все зарезервированные ключевые слова доступны в Kotlin, компилятор Kotlin не может (не?) Обнаружить зарезервированные ключевые слова, которые есть только в Java.
Например, возьмите пример default
. Это зарезервированное ключевое слово Java. Это означает, что вы не можете сделать следующее.
public class UserJava {
public String default;
}
Однако это не зарезервированное ключевое слово в Kotlin, поэтому вы можете использовать его следующим образом
class UserKotlin {
var default: String? = null
}
Для тех, кто не знает Java, было бы трудно узнать, что они являются зарезервированным ключевым словом. Так как компилятор Kotlin не выдаст вам ошибки или какого-либо предупреждения о том, что вы используете зарезервированное ключевое слово, это может позже вызвать некоторые проблемы, которые вы не ожидаете.
Одна из проблем, с которой он может столкнуться, возникает во время AnnotationProcessing , которые представляют собой библиотеки, которые вы включаете в свой Gradle с kapt
или annotationProcessor
. Поскольку Kotlin использует компилятор Java, когда вы, например, пытаетесь получить поля класса UserKotlin
, вы получите пустой список, поскольку компилятор Java НЕ «понимает» поле default
и игнорирует его (пропускает?).
Пример из реальной жизни может быть, если вы используете библиотеку Room и имеете сущность, как показано ниже
@Entity
class User{
@PrimaryKey
var id: Int = 0
var default: String? = null
}
Процессор аннотаций комнат сгенерирует запрос на создание SQLite
CREATE TABLE IF NOT EXISTS `User` (`id` INTEGER NOT NULL, PRIMARY KEY(`id`))
Итак, оно в основном пропустило поле default
.
Есть ли способ, которым Kotlin выдает предупреждение, когда я пытаюсь использовать зарезервированные ключевые слова Java? Или это ошибка в Kotlin, которая еще не исправлена? Или есть какие-либо документы, которые упоминали эту проблему.
Если я знаю Java, то я могу отказаться от использования таких ключевых слов, так как знаю, что они зарезервированы в Java. Но что, если я не знаю Java и не могу понять, в чем проблема?