首页 > 解决方案 > Kotlin Enums:引用从它调用的任何 Enum 对象的函数

问题描述

我正在尝试print()从枚举中的对象编写一个可以如下调用的枚举函数Molecule

Molecule.HYDROGEN_MOLECULE.print()
myMolecule.print()

我不想为函数提供特定的枚举对象:

Molecule.print(Molecule.HYDROGEN)

但是,当我在 中创建函数时Molecule,当我尝试引用 的列表时出现错误MolecularFragment

我需要在 print() 中使用什么语法来myMolecule.print()引用该MolecularFragment特定枚举对象的列表?

enum class Molecule (val MolecularFragments : List<MolecularFragment> = emptyList()) {

    HYDROGEN_MOLECULE(listOf(MolecularFragment.H2)),

    WATER_MOLECULE(listOf(MolecularFragment.H2O)),
    // ...
    HEXANE_MOLECULE(listOf(MolecularFragment.CH3, MolecularFragment.CH2));

    fun print() {

        **var x : List<MolecularFragment> = Molecule.MolecularFragments**
        x.forEach() {
            println("$it")
        }
        println(" --- ${Molecule.toString()}")
    }
}

标签: enumskotlin

解决方案


我想这正是你想要的:

enum class MolecularFragment { H2, H2O, CH3, CH2 }

enum class Molecule (val molecularFragments : List<MolecularFragment> = emptyList()) {

    HYDROGEN_MOLECULE(listOf(MolecularFragment.H2)),

    WATER_MOLECULE(listOf(MolecularFragment.H2O)),

    HEXANE_MOLECULE(listOf(MolecularFragment.CH3, MolecularFragment.CH2));

    fun print() {
        molecularFragments.forEach(::println)
        println("${this::class.java.toString()}")
    }
}

fun main(args: Array<String>) {
    Molecule.HYDROGEN_MOLECULE.print()
}

几点注意事项:

  • 您以双星号突出显示的行甚至没有编译。
  • 您可以使用函数引用来打印元素。
  • 您不需要molecularFragments先将属性放入变量中。
  • 下次,请指定MolecularFragment以便代码可以立即运行。

推荐阅读