Kotlin类属性的延迟初始化赢得';不编译

Kotlin类属性的延迟初始化赢得';不编译,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.latitud

我不完全确定我所认为的问题是否真的存在。但是我尝试使用
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()
        }

    }
}

我认为问题在于没有使用正确的
。我试过
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()!!)
    }
} 
或者,如果希望使用空值作为可能的边界,请使用
?。
安全运算符而不是
并将
界限
类更改为允许
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-ne:Geocode?、val-sw:Geocode?)
数据类示例(val集线器:集合){
瓦尔被懒惰所束缚{
边界(hubbs.maxBy{it.position}?.position,
hubs.minBy{it.position}?.position)
}
}

注意,在上一个示例中,我从
val-bounds:bounds
中删除了类型,因为它是可选的,类型推断可以很好地解决它。

基于问题中的当前代码:

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()!!)
    }
} 
或者,如果希望使用空值作为可能的边界,请使用
?。
安全运算符而不是
并将
界限
类更改为允许
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-ne:Geocode?、val-sw:Geocode?)
数据类示例(val集线器:集合){
瓦尔被懒惰所束缚{
边界(hubbs.maxBy{it.position}?.position,
hubs.minBy{it.position}?.position)
}
}

注意,在上一个示例中,我从
val-bounds:bounds
中删除了类型,因为它是可选的,类型推断可以很好地解决它。

好的,我解决了问题:2倍

语法错误为“未知符号”?我需要的是
=
,而不是
(DOH!)

Lombok:
position
Hub
中,它的getter由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;
}

最终这是一个整合问题。叹气

好的,我解决了问题:2倍

语法错误为“未知符号”?我需要的是
=
,而不是
(DOH!)

Lombok:
position
Hub
中,它的getter由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;
}


最终这是一个整合问题。叹气

您需要显示编译器错误。从lazy中删除“return”,在lambda中不返回。另外,您可以制作一个依赖项较少的示例吗?将立即更新您仍然应该使用编译器中显示的错误消息更新您的问题。我们的问题应该可以帮助其他有相同或类似问题的人,而您还没有提供足够的详细信息来实现这一点。您需要显示您的编译器错误。从lazy中删除“return”,在lambda中不返回。另外,您可以制作一个依赖项较少的示例吗?将立即更新您仍然应该使用编译器中显示的错误消息更新您的问题。我们的问题应该可以帮助其他有相同或类似问题的人,但您没有提供足够的详细信息。此答案解决了一些编译器错误,但解决方案不起作用
ne
sw
不可被任何人访问,因为该类是由匿名对象表达式创建的
Any
,该表达式无法通过其类型访问。您在此答案中引入了本应添加到问题中的新信息。通过确保Kotlin注释,Lombok问题可能会得到解决处理器(KAPT)正在使用中,因此Lombok在Kotlin编译器处理源代码之前已经完成了它的魔术,因为Kotlin在Java处理之前首先运行。因此,您的答案可以解决这个问题,但这不是处理与运行在那里的Java和注释处理器集成的正确方法。但是,我明白你的意思。我会把它移到真实的地图上。让我看看如何打开KAPTIf。如果我修改了问题,将“hub”定义为带有正确注释的Java,我可以收回投票吗?这个答案解决了一些编译器错误,但解决方案不起作用
ne
sw
不可被任何人访问,因为该类是由匿名对象表达式创建的
Any
,该表达式无法通过其类型访问。您在此答案中引入了本应添加到问题中的新信息。通过确保Kotlin注释,Lombok问题可能会得到解决处理器(KAPT)正在使用中,因此Lombok在Kotlin编译器处理源代码之前已经完成了它的魔术,因为Kotlin在Java处理之前首先运行。因此,您的答案可以解决这个问题,但这不是处理与运行在那里的Java和注释处理器集成的正确方法。但是,我明白你的意思。我会把它移到真实的地图上。让我看看如何打开KAPTIf如果我修改这个问题,将“hub”定义为带有正确注释的Java,我可以收回投票吗?