这是一个稍微抽象的问题,关于找到一个漂亮的设计方法,只需要最少的样板。
先决条件:
enum class Provider { Google, Microsoft }
interface Foo { fun getMail(): Mail }
将针对每个特定提供商实施。我很好奇是否有办法以实现接口Provider
的方式定义ENUM类Foo
,之后我可以指定每个具体提供程序将由哪些对象实现?
我想知道是否可以有一个无样板的方法来定义具体接口的枚举类,而我可以稍后定义将实现具体提供程序的对象。
先决条件并不牢固所以如果更好的设计需要更改,那么我渴望得到更好的建议。
答案 0 :(得分:4)
是的
您可以使枚举实现接口。
enum class Provider(val mail: Mail) : Foo {
Google(googleMail),
Microsoft(microsoftMail);
override fun getMail(): Mail = mail // Or this.mail
}
interface Foo { fun getMail(): Mail }
然后你访问
Provider.Google.getMail()
其他方式是使用val成员
interface Foo { val mail: Mail }
enum class Provider(override val mail: Mail) : Foo {
Google(googleMail),
Microsoft(microsoftMail)
}
并访问
Provider.Google.mail