如何通过子类型避免kotlin工厂类方法?

时间:2018-01-15 14:26:53

标签: java kotlin kotlin-reified-type-parameters

我有一个关于kotlin的问题:

想象一下你有这个:

sealed class Graph : Serializable
data class Graph1() : Graph() {}
data class Graph2() : Graph() {}

并且你想要一个工厂类,给定一个Graph子类型给你一个GraphView。

所以,你有类似于

的东西
interface GraphViewFactory{
  fun get(data: Graph1):GraphView
  fun get(data: Graph2):GraphView
}

而且你也有实现。

在kotlin中是否可以避免这种方法使用内联和具体化的每个图形类型的接口爆炸?我试图尝试,但我没能。

一方面,kotlin界面(我认为)不允许内联函数,另一方面即使没有界面我也无法自动将参数T自动转换为内部特定子类之一工厂类。

1 个答案:

答案 0 :(得分:1)

您不必继续创建方法(尽管您可能希望依赖于创建GraphView的复杂程度),但when中的案例数量会增加。< / p>

class GraphViewFactory {
  fun get(data: Graph): GraphView {
     return when {
         is Graph1 -> TODO()
         is Graph2 -> TODO()
         else -> IllegalArgumentException()
     }
  }
}

使用具体类型不会在这里给你买任何东西。