我找到了这段代码:
Class<? extends Enum> enumClass = Class.forName(Charsets.class.getName())
.asSubclass(Enum.class);
Run Code Online (Sandbox Code Playgroud)
我想使用龙目岛(Lombok)对其进行重构,但是发生了意外情况。当我将其更改为:
val enumClass = Class.forName(Charsets.class.getName())
.asSubclass(Enum.class);
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
令人惊讶的是,代码可以很好地编译,并且使用它的测试可以通过。
我不确定这是Lombok插件,IDE中的错误还是我做错了什么。Lombok是否应该能够轻松推断出变量的正确类型?
我的问题是:我可以安全地使用该代码,还是应该还原为原始代码?
我正在使用最新的(当前)InteliiJ:
IntelliJ IDEA 2016.3
Build#IU-163.7743.44,建于2016年11月17日
JRE:1.8.0_112-release-408-b2 amd64
JVM:JetBrains sro的OpenJDK 64位服务器VM
和龙目岛插件:
龙目岛插件
版本:0.13.16
假设我有以下 Kotlin 类:
data class Person(val firstName: String, val lastName: String)
Run Code Online (Sandbox Code Playgroud)
因为这是一个data类,所以会自动生成具有以下签名的方法:
fun copy(firstName: String = this.firstName, lastName: String = this.lastName): Person
Run Code Online (Sandbox Code Playgroud)
现在,我想从 Java 代码中调用此方法,例如:
Person john = new Person("John", "Smith");
Person adam = john.copy("Adam");
Run Code Online (Sandbox Code Playgroud)
我现在期望有两个Person对象:“约翰·史密斯”和“亚当·史密斯”。
遗憾的是,该copy方法没有重载变体,并且我看不到任何通过@JvmOverloads.
到目前为止,我已经尝试重载它并创建一个扩展,但它被隐藏了,并且像 Java 中的静态方法一样工作(加上有很多样板文件):
@JvmOverloads
fun Person.copy(firstName: String = this.firstName, lastName: String = this.lastName): Person {
return this.copy(firstName = firstName, lastName = lastName)
}
Run Code Online (Sandbox Code Playgroud)
是否可以以不需要编写太多代码的方式来完成?