Kotlin ENUM类具有由委托实现的公共接口

mis*_*ope 4 enums delegates kotlin

这是一个关于以最小的样板找到漂亮的设计方法的抽象问题。

先决条件:

  • 我有一个ENUM类,用于枚举各种提供程序,即: enum class Provider { Google, Microsoft }
  • 假设有一个服务接口interface Foo { fun getMail(): Mail },将为每个特定的提供程序实现。

我很好奇是否有一种方法可以定义ENUM类Provider,以实现接口,Foo而我以后可以指定每个具体提供者将通过哪些对象实现?

我想知道是否有没有样板的方法来定义具体接口的枚举类,而我以后可以定义将通过哪些对象实现具体提供者。

先决条件并不牢固,因此,如果一个更好的设计需要更改,那么我渴望一个更好的建议。

Vin*_*gel 7

是的

您可以使枚​​举实现接口。

enum class Provider(val mail: Mail) : Foo {
    Google(googleMail),
    Microsoft(microsoftMail);

    override fun getMail(): Mail = mail // Or this.mail
}

interface Foo { fun getMail(): Mail }
Run Code Online (Sandbox Code Playgroud)

然后您访问

Provider.Google.getMail()
Run Code Online (Sandbox Code Playgroud)

其他方法是使用val成员

interface Foo { val mail: Mail }

enum class Provider(override val mail: Mail) : Foo {
    Google(googleMail),
    Microsoft(microsoftMail)
}
Run Code Online (Sandbox Code Playgroud)

和访问

Provider.Google.mail
Run Code Online (Sandbox Code Playgroud)