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

有没有Kotlin语言的任何类型,我可以用在后期初始化而不是java.lang.Integer所以我没有得到一个编译器的警告?

假设我有这样一个班级:

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

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

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

SomeClass.kt:(20,24):这个类不应该在Kotlin中使用。 改用kotlin.Int。

显然我可以自己创建需要的类型,但是我只是想知道是否有什么东西可以用,并建议我们在这种情况下使用,而我根本找不到它? (注释的构造函数在这种情况下不是解决方案)。

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

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

一个复杂的例子,你可以写一个委托的属性,但你必须在setter注释@ @set site-target而不是field / property ,例如:

 @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; } } }