Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Generics 是否可以将类型参数信息传递给dagger子组件?_Generics_Kotlin_Dagger_Subcomponent - Fatal编程技术网

Generics 是否可以将类型参数信息传递给dagger子组件?

Generics 是否可以将类型参数信息传递给dagger子组件?,generics,kotlin,dagger,subcomponent,Generics,Kotlin,Dagger,Subcomponent,我希望能够将类型信息公开给泛型抽象类中的子组件。我们有一个抽象类,其类型参数设置在子类中(后者在我们的图中绑定),并尝试将此类型信息传递给该类中的子组件。尝试将类型参数附加到子组件的方式 下面是一个我想要实现的更具体的例子: 接口运行程序{ 趣味跑(t:t) } 数据类数据( val选项:T ) 抽象类AbstractRunner:Runner{ @注入 lateinit var mySubcomponentBuilder:MySubcomponent.Builder //构建这个依赖于必须在运

我希望能够将类型信息公开给泛型抽象类中的子组件。我们有一个
抽象类
,其类型参数设置在子类中(后者在我们的图中绑定),并尝试将此类型信息传递给该类中的子组件。尝试将类型参数附加到子组件的方式

下面是一个我想要实现的更具体的例子:

接口运行程序{
趣味跑(t:t)
}
数据类数据(
val选项:T
)
抽象类AbstractRunner:Runner{
@注入
lateinit var mySubcomponentBuilder:MySubcomponent.Builder
//构建这个依赖于必须在运行时生成的dynamicata
//(因此为子组件)
//@注入
//lateinit var子运行程序:运行程序
覆盖趣味跑步(数据:数据){
//一些动态生成的数据-我们不能使用辅助注入,因为它被注入到中的其他类中
//子图。
val dynamicData=Random.nextInt()
mySubcomponentBuilder
.dynamicATA(dynamicATA)
.build()
.子组件trunner()
.run(data.options)
}
}
//我们还有其他与Runner实现相关的对象;
//为了简洁起见,我们列出了一个。
对象Foo
类MyRunner@Inject构造函数():AbstractRunner()
类SubRunner@Inject构造函数(s:String):Runner{
重写趣味跑(t:Foo){}
}
@组件(模块=[MyModule::class])
接口组件{
有趣的跑步者():跑步者
}
@模块(子组件=[MySubcomponent::class])
接口模块{
@束缚
乐趣bindMyRunner(runner:MyRunner):runner
}
//这不起作用,因为(子)组件上禁止使用泛型。
@子组件(模块=[子模块::类])
接口MySubcomponent{
//我们无法参数化该方法;在(子)组件中的方法上禁止使用泛型。
有趣的子组件trunner():Runner
@子组件生成器
界面生成器{
@装订
趣味动态CDATA(i:Int):生成器
fun build():MySubcomponent
}
}
@模块
对象子模块{
@提供
有趣的破坏(i:Int)=i.toString()
@提供
fun provideSubRunner(s:String):Runner=子Runner(s)
}
当然,这并不需要:

error: @Subcomponent.Builder types must not have any generic types

有没有可能以其他方式将这些信息连接起来?如果子组件中绑定的变量不需要,我们可以在主图中绑定
subRunner:Runner
,没有问题,如注释所示。

只需为您想要的每个具体类型添加一个
fun subcomponentRunner()
。无论如何,您将为
T
的每个值提供不同的实现,而我将为每个类型提供不同的值,为每个类型添加不同的子组件方法是非常繁琐的,需要打开
数据的类型。选项
以确保调用正确的方法。