假设我有以下代码:
open class Fruit
class Apple : Fruit()
open class Juice<T : Fruit>
class AppleJuice : Juice<Apple>()
fun <F : Fruit, J : Juice<F>> makeJuice(juiceClass : Class<J>, fruit : F) : J {}
我这样调用函数:
val appleJuice : AppleJuice = makeJuice(AppleJuice::class.java, Apple())
但是我不想传递一个类对象,而是AppleJuice
作为一个类型传递:
val appleJuice : AppleJuice = makeJuice<AppleJuice>(Apple())
我已将我的函数重构为内联reified
:
inline fun <F : Fruit, reified J : Juice<F>> makeJuice(fruit : F) : J {}
但现在我必须指定两种类型:
val appleJuice : AppleJuice = makeJuice<Apple, AppleJuice>(Apple())
理论上,Apple
不应该需要类型,因为它已经从AppleJuice
类型中知道了。是否有可能摆脱传递不必要的类型而只传递那些作为reified
?