使用Kotlin 1.0.0版本(在IntelliJ 15中编译).
println(myPojoInstance.foo)
Run Code Online (Sandbox Code Playgroud)
当它尝试编译引用基于Lombok的POJO的代码(在IntelliJ或Gradle中)时,它会给出错误"无法访问'foo':它在'MyPojo'中是'私有'.这是真的,它们都是私有的,我的对象有@Value @Builder用于lombok注释.
我试过专门调用getFoo(),但它说"getFoo的未解析引用".也许有一些技巧可以让Kotlin意识到如何处理lombok注释?
假设我只想在生成的equals和hashCode实现中包含一个或两个字段(或者可能排除一个或多个字段).对于一个简单的类,例如:
data class Person(val id: String, val name: String)
Run Code Online (Sandbox Code Playgroud)
Groovy有这个:
@EqualsAndHashCode(includes = 'id')
Run Code Online (Sandbox Code Playgroud)
龙目岛有这个:
@EqualsAndHashCode(of = "id")
Run Code Online (Sandbox Code Playgroud)
在Kotlin这样做的惯用方法是什么?
data class Person(val id: String) {
// at least we can guarantee it is present at access time
var name: String by Delegates.notNull()
constructor(id: String, name: String): this(id) {
this.name = name
}
}
Run Code Online (Sandbox Code Playgroud)
虽然感觉不对......我真的不想name变成可变的,额外的构造函数定义很难看.