【发布时间】:2020-02-28 16:40:13
【问题描述】:
我可以在 Java 中做到这一点:
public <T extends Bar & Baz> Foo(T arg) { ... }
在Foo 的构造函数中,arg 的类型是扩展Bar 并实现Baz。这是在不向Foo(即class Foo<T extends Bar & Baz>)添加类型参数的情况下完成的。我如何在 Kotlin 中做同样的事情?类似:
constructor<T>(arg: T) where T : Bar, T : Baz { ... }
更新:我想添加更多上下文,我在 Android 中使用 dagger,这需要我这样做:
@ContributesAndroidInjector
abstract fun Foo(): Foo
当我这样做时,@ContributesAndroidInjector methods cannot return parameterized types 失败:
@ContributesAndroidInjector
abstract fun Foo(): Foo<*>
这就是为什么添加类型参数(类似于ysakhno 的答案)不是解决方案的原因。
【问题讨论】:
-
所以本质上你需要一个默认构造函数(除了带参数的构造函数)?
-
只是为了理解用例:如果类没有类型参数,你将如何使用构造函数的参数化参数?
-
@ContributesAndroidInjector通常用于 Android 清单中列出的类,这些类没有构造函数参数。你想用这种方式解决什么问题? -
我更新了我的答案以满足您的特定需求。希望对您有所帮助。
-
我的建议是简单地使其成为工厂方法而不是构造函数。