在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; } } }
- 相同的其他端点具有不同的PathVariable
- 用Kotlin解释@Configuration @AutoConfigureAfter
- Kotlin春天类方面的启动
- Spring代理类和Kotlin中的空指针异常
- Reactive Spring 5安全性Kotlin的主要名称
- Spring Security,Method Security注解(@Secured)不工作(java config)
- 如何在基于Spring的强类型语言中正确地使用PATCH – example
- Spring数据Elasticsearch与Kotlin数据类的脚本字段导致Jackson序列化问题
- 将thymeleaf版本2.14迁移到3.0不能找到消息属性