代码之家  ›  专栏  ›  技术社区  ›  borjab

使用java7方法从Intellij生成Kotlin equals和hashcode方法

  •  0
  • borjab  · 技术社区  · 3 年前

    我想生成 Kotlin equal和hashcode使用Java 7方法,就像我们 usually do for Java 。让我们假设将类转换为数据类不是一个选项。

    在IntelliJ中,对于Java,我可以选择Equal和HashCode模板,用更优雅、更紧凑的Java 7版本来实现它。

    enter image description here

    然而,在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>
    

    我还更新了这里的主配置:

    enter image description here

    0 回复  |  直到 3 年前