【发布时间】:2018-01-15 14:26:52
【问题描述】:
我有一个关于 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 自动转换为工厂内的特定子类型类之一类。
【问题讨论】:
-
你的故事不完整。
get方法的返回类型是什么?它们都一样吗,只是GraphView?如果是,那么你真的没有问题。如果不是,并且您有GraphView1和GraphView2,那么您的输入和输出类型之间存在静态类型系统中无法表达的关系。 -
抱歉,我已经更新了示例。是的,这两种方法都会返回 GraphView。
-
你说没有问题是什么意思?我认为您将根据 when(param) 是 WhatEver 类型在工厂内转换类型,然后进行转换,但我正在尝试找到一种方法来避免使用 reified 和 inline 进行转换。 (只是好奇)
-
那么,这有什么问题呢?你不能将
Graph传递给GraphView并让它决定做什么,使用is和as,可能吗?我仍然没有看到你的问题中真正的紧张,究竟是什么在困扰你。最终在GraphView中,您必须知道它是哪种类型?或不?未解决的问题太多。
标签: java kotlin kotlin-reified-type-parameters