[英]Inject sealed class with Hilt/Dagger2
我必須通過構造函數注入一個密封類,但我收到編譯錯誤:
所以,我想做的是創建一個像這樣的密封:
sealed class Alphabet {
object A: Alphabet()
object B: Alphabet()
data class C (val x: String): Alphabet()
data class D (val y: Int): Alphabet()
}
並將其注入另一個類的構造函數中,如下所示:
@ViewModelScoped
class RandomUseCase @Inject constructor(
private val alphabet: Alphabet
) {
val z = when (alphabet) {
A -> ...
B -> ...
C -> alphabet.x
D -> alphabet.y
}
那么,我該如何注入呢?
因此,根據 Kotlin 官方文檔,密封類的構造函數默認是私有的,Hilt 需要一個可見的構造函數來獲取其實現。
通過閱讀你的問題,我真的不確定你為什么需要一個密封的課程。 注入類或實現的目的是獲取每個實例化的對象,但在密封類的情況下,您不能直接在其 Hilt 模塊中實例化密封類,如下所示。
@Singleton
@Binds
abstract fun provideAlphabet(alphabet: Alphabet): Alphabet
建議:
您可以簡單地在函數中傳遞一個密封類對象,然后在函數中進行比較,而不是注入密封類並在函數中使用它。
fun sampleForSealed() {
sampleForPassingSealed(Alphabet.A)
}
fun sampleForPassingSealed(alphabet: Alphabet) {
when (alphabet) {
Alphabet.A -> {
}
Alphabet.B -> {
}
}
}
快樂編碼!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.