我想生成
Kotlin
equal和hashcode使用Java 7方法,就像我们
usually do for Java
。让我们假设将类转换为数据类不是一个选项。
在IntelliJ中,对于Java,我可以选择Equal和HashCode模板,用更优雅、更紧凑的Java 7版本来实现它。
然而,在Kotlin,我被直接重定向到一个菜单来选择属性。
这是一个
Java语言
生成一个:
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Delete delete = (Delete) o;
return var == delete.var && Objects.equals(foo, delete.foo);
}
@Override
public int hashCode() {
return Objects.hash(foo, var);
}
这是一个Kotlin的:
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (javaClass != other?.javaClass) return false
other as Delete
if (foo != other.foo) return false
if (`var` != other.`var`) return false
return true
}
override fun hashCode(): Int {
var result = foo.hashCode()
result = 31 * result + `var`
return result
}
您可能会意识到Kotlin版本是用素数本身对数字哈希进行编码的。那是因为它没有使用
Objects.hash
或
Objects.equals
笔记
:我是Intellij 2021.1.3 Ultimate
使现代化
:
我的kotlin目标版本设置为Java 11,其中包含:
<plugin>
<artifactId>kotlin-maven-plugin</artifactId>
<groupId>org.jetbrains.kotlin</groupId>
<version>${kotlin.version}</version>
<configuration>
<compilerPlugins>
<plugin>spring</plugin>
</compilerPlugins>
<jvmTarget>${java.version}</jvmTarget>
我还更新了这里的主配置: