Допустим, у меня есть интерфейс Kotlin:
interface Dog {
fun walk()
}
Я хочу создать объект Kotlin этого класса с небольшими изменениями , например:
val poodle : Dog = object : Dog {
override fun walk() {
...
}
}
Однако я также хочу добавить к этому объекту то, что эквивалентно частному статическому конечному полю в Java, например, ( это рабочий пример в Java ):
Dog poodle = new Dog() {
private static final String POODLE_FASHION = ...
@Override
public walk() {
...
}
}
Я читал, что частный const val эквивалентен этому в Kotlin.Я попытался сделать следующее (это пример в Kotlin, который НЕ работает) :
val poodle : Dog = object : Dog {
private const val POODLE_FASHION = ...
override fun walk() {
...
}
}
Когда я сделал это, я получил следующую ошибку в Android Studio: Const 'val' разрешены только на верхнем уровне или в объектах .
Может кто-нибудь объяснить, почему работает версия Java, а версия Kotlin - нет?Как мне сделать это для Kotlin (я уже пробовал объект-компаньон, но получил ошибку Модификатор «companion» не применим внутри «локального класса» )?Обратите внимание, что я не хочу делать следующее, потому что я хочу, чтобы POODLE_FASHION
жил внутри val poodle
, так как я собираюсь также создавать другие объекты Dog с небольшой модификацией (val pug
, val chihuahua
и т. Д.):
private const val POODLE_FASHION = ...
val poodle : Dog = object : Dog {
override fun walk() {
...
}
}
Спасибо!