Intereting Posts
Kotlin "Любой тип, который реализует интерфейс" Правило Kotlin Proguard для перечисления? Kotlin и новый ActivityTestRule: @Rule должен быть общедоступным Почему компилятор Kotlin требует явного инициализатора свойства var? Расширения привязки Kotlin's перестают работать после предела метода 65k Являются ли оптимизаторы Kotlin Float, Int и т. Д. Для встроенных типов в JVM? Функциональный способ накопления внутри функции Единицы в Котлине? Ввод / вывод дженериков для абстрактного контейнерного инструмента в Котлине? Невозможно преобразовать в коллекцию в котлин Как насмехаться над объектом Singleton Kotlin? Модуль библиотеки Android не компилируется при использовании классов из чистого модуля Kotlin Android Studio 3.0 "JUnit версии 3.8 или более поздней версии" Android Kotlin: файл BuildConfig не дает правильного значения При создании интерфейса в Kotlin имеет значение, если свойства get / set? Как оценивать программу Котлин?

Ленивая инициализация свойства класса Kotlin не будет компилироваться

Я не совсем уверен, что на самом деле это проблема. Но я пытаюсь использовать lazy как делегат, и я получаю ошибки компилятора

 data class Geocode(var latitude: Double, var longitude: Double) : Comparable<Geocode> { override fun compareTo(other: Geocode): Int { var result = this.latitude.compareTo(other.latitude) if (result == 0) result = this.longitude.compareTo(other.longitude) return result } } data class HubKt(val position:Geocode) { } data class Example(val hubs:Collection<HubKt>) { val bounds:Any by lazy { object { val ne: this.hubs.map { h -> h.position }.max() val sw: this.hubs.map { h -> h.position }.min() } } } 

если это была java, я бы хотел, чтобы функция bounds возвращала карту:

 public Map<String,Geocode> getBounds() { Geocode ne = geos.stream().max(Geocode::compareTo).get(); Geocode sw = geos.stream().min(Geocode::compareTo).get(); return ImmutableMap.of("ne",ne,"sw",sw); } 

Я думаю, что проблема не в том, чтобы использовать это правильно. Я пробовал this@Authenticate и это не выход. Черт, я мог бы даже переусердствовать. Спасибо за понимание.

Исходя из текущего кода в вопросе:

 data class Bounds(val ne: Geocode, val sw: Geocode) data class Example(val hubs:Collection<HubKt>) { val bounds: Bounds by lazy { Bounds(hubs.map { it.position }.max()!!, hubs.map { it.position }.min()!!) } } 

В противном случае в вашем ответе вы не сможете получить доступ к ne и sw в своем анонимном потомке Any который вы создаете с помощью выражения объекта. Вам нужен типизированный ответ, такой как класс Bounds или Map (что было бы неприятно). А также в вашей версии они могут быть пустыми. Если вы знаете, что у вас есть хотя бы одно значение в списке, вы можете использовать !! утверждать, что вы знаете, что результат max или min не будет равен нулю.

Вы можете сделать это без копии, созданной картой с этим изменением:

 data class Example(val hubs:Collection<HubKt>) { val bounds: Bounds by lazy { Bounds(hubs.maxBy { it.position }!!.position, hubs.minBy { it.position }!!.position) } } 

Или если вы хотите, чтобы нули в качестве возможных границ использовали ?. безопасный оператор вместо !!. и измените класс Bounds чтобы разрешить null :

 data class Bounds(val ne: Geocode?, val sw: Geocode?) data class Example(val hubs:Collection<HubKt>) { val bounds by lazy { Bounds(hubs.maxBy { it.position }?.position, hubs.minBy { it.position }?.position) } } 

Обратите внимание, что в последнем примере я сбросил тип из val bounds: Bounds потому что он является необязательным, и вывод типа будет очень точным.

Хорошо, я решил проблему: в 2 раза

Синтаксическая ошибка как «неизвестный символ»? Мне нужно = и не : (DOH!)

  val bounds:Any by lazy { object { val ne = hubs.map { h -> h.position }.max() val sw = hubs.map { h -> h.position }.min() } } 

Lombok: position в Hub имеет его получатель от Lombok:

 @Getter @Setter private Geocode position = new Geocode(50.0,50.0); 

Изменить на:

 @Setter private Geocode position = new Geocode(50.0,50.0); public Geocode getPosition() { return position; } 

В конечном итоге это была проблема интеграции. вздох