gpt4 book ai didi

java - 在 Kotlin 项目中使用 @Value 注释时出现编译器警告

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:03:14 25 4
gpt4 key购买 nike

我可以在后期初始化中使用 Kotlin 语言中的任何类型来代替 java.lang.Integer,这样我就不会收到编译器警告吗?

假设我有这样一个类:

class SomeClass {
@Value(#{config['poolCapacity']?:'5000'})
lateinit var somePool: Integer
}

我不能使用 Kotlin 中的 Int 类型,因为它是原始类型并且 lazeint 不接受它。

如果我坚持使用 java.lang.Integer 它工作得很好,但我收到了这样的编译器警告:

SomeClass.kt: (20, 24): This class shouldn't be used in Kotlin. Use kotlin.Int instead.

显然我可能会自己创建所需的类型,但我只是想知道是否有开箱即用的东西并建议我们应该在这种情况下使用但我就是找不到它? (在这种特殊情况下,带注释的构造函数不是解决方案)。

最佳答案

最简单的解决方案是不要使用延迟初始化属性,因为 Kotlin 延迟初始化属性现在不支持原始类型,您可以使用 spring 表达式的默认值对其进行初始化,例如:

@Value(#{config['poolCapacity']?:'5000'})
var somePool: Int = 5000

一个复杂的例子,你可以写一个委托(delegate)属性,但是你必须在 setter 处用 @set site-target 来注解,而不是 field/属性 ,例如:

@set:Value(#{config['poolCapacity']?:'5000'})
var value by required<Int>()

inline fun <reified T> required(): ReadWriteProperty<Any, T> {
return object : ReadWriteProperty<Any, T> {
var value: T? = null;
override fun getValue(thisRef: Any, property: KProperty<*>): T = value as T

override fun setValue(thisRef: Any, property: KProperty<*>, value: T) {
this.value = value;
}

}
}

关于java - 在 Kotlin 项目中使用 @Value 注释时出现编译器警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45287003/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com