Intereting Posts
Спецификация Jpa, чтобы найти подмножество значения поля Asynctask несколько последовательных запросов URL в Android Android w / Kotlin pure-java-Junit NoClassDefFoundError обходной путь не работает Как экспортировать функции Kotlin в Javascript с правильным именем FATAL EXCEPTION: основное исключение KotlinNullPointerException Ошибка Gmail «Не удалось подключить файл» Тестирование с помощью spek и обмен некоторыми базовыми тестовыми примерами для базовых классов Как получить доступ к Mono <T> При обработке исключения с помощью onErrorMap ()? Конструктор по умолчанию для IntentService (kotlin) Создайте класс POJO для Kotlin Низкая производительность анимации параметров макета в Android Связанная ссылка на вызов не работает с реактором Подписаться Spring не может обрабатывать метод, возвращающий общий внутренний класс Kotlin Как использовать простое наследование для класса данных? Ожидаемое несоответствие типа с выражением в Котлине

Ленивая инициализация свойства класса 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; } 

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