Таким способом ты можешь сказать даггеру, что этот сабкомпонент будет сабом именно к конкретному (или нескольким) компонентам. Это может быть полезно, если ты его(или его фабрику/билдер) хочешь не получать руками из компонента, а заинжектить.
Например:
@SubComponent
interface MySubComponent{
...
}
@Module(subcomponents=[MySubComponent::class])
interface SubcomponentsModule
@Component(modules=[SubcomponentsModule::class])
interface MyComponent{
fun inject(what: MyClass)
}
class MyClass{
@Inject
lateinit var subcomponent:. MySubComponent
fun inject (){
// Инжектим с помощью MyComponent
}
В этом случае не нужно в интерфейсе компонента писать функцию, возвращающую сабкомпонент.
А если ты хочешь писать такую функцию, и дергать её руками непосредственно из компонента, то в модуле можно не перечислять.