Kotlin语言中是否有任何类型我可以在后期初始化而不是class SomeClass {
@Value(#{config['poolCapacity']?:'5000'})
lateinit var somePool: Integer
}
中使用,以便我不会收到编译器警告?
假设我有一个类似这样的课程:
Int
我无法使用Kotlin中的lazeint
类型,因为它是原始类型而java.lang.Integer
不接受它。
如果我坚持var i, frames;
frames = document.getElementsByTagName("iframe");
for (i = 0; i < frames.length; ++i)
{
// The iFrame
if (!frames[i].hasAttribute("allowfullscreen")) {
frames[i].setAttribute('allowFullScreen', '')
}
}
它的工作正常但我收到了这种编译警告:
SomeClass.kt:(20,24):这个类不应该在Kotlin中使用。使用 kotlin.Int代替。
显然我可能会自己创建所需的类型,但我只是想知道是否有开箱即用的东西,并建议我们应该在这种情况下使用而我根本找不到它? (在这种特殊情况下,带注释的构造函数不是解决方案)。
答案 0 :(得分:4)
最简单的解决方案是不要使用后期初始化属性,因为Kotlin后期初始化属性现在不支持基本类型,并且可以使用spring表达式的默认值对其进行初始化,例如:
@Value(#{config['poolCapacity']?:'5000'})
var somePool: Int = 5000
您可以编写委派属性的复杂示例,但必须在setter
@set
网站目标而不是field
/ property
进行注释,例如:< / p>
@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;
}
}
}