在Kotlin中覆盖枚举toString()?

时间:2018-11-25 21:46:16

标签: android kotlin

如何在Kotlin中为枚举自定义toString()方法?

enum class GuideType(type: String) {
    DEF_TYPE("default"),

    override fun toString(): String {
        return type // not working!
    }
}

3 个答案:

答案 0 :(得分:2)

默认构造函数参数必须为varval,才能在init块之外访问。另外,您需要在最后一个枚举项之后添加半色,以添加任何新功能或替代。

enum class GuideType(var type: String) {
    DEF_TYPE("default");

    override fun toString(): String {
        return type // working!
    }
}

答案 1 :(得分:2)

在主构造函数中,如果希望全局可见(在类/枚举方法中本地包含),则需要使用varval。否则,它只是在本地进行初始化。考虑一下:

public GuideType (String type) {}

与此相比:

private String type;
public GuideType (String type) { this.type = type; }
// Getters and setters

如果没有varval,它将产生与第一个 1 大致相同的东西。您还可以在init块中以及在类级变量初始化中访问它。因此,为了在方法中使用它,请在val前面加上

enum class GuideType(val type: String) { ... }

由于变量(可能)不会被更改,因此它也应该是val. You can, of course, use var`。


请注意,这适用于主要构造函数。二级构造函数的工作方式不同。


1:Kotlin还将产生一堆空安全的东西,包括@NotNull和null检查,但是代码仍然是大致等效的

答案 2 :(得分:0)

您可以使用以下方法扩展Enum类:

id_token