我有一個如下所示的界面:
interface LabelledEnum {
fun getLabelId(): Int
}
我在列舉類中繼承了這個介面,如下所示:
enum class Period : LabelledEnum {
YTD {
override fun getLabelId(): Int =
R.string.ytd_label
},
ONE_MONTH {
override fun getLabelId(): Int =
R.string.1m_label
},
THREE_MONTHS {
override fun getLabelId(): Int =
R.string.3m_label
},
SIX_MONTHS {
override fun getLabelId(): Int =
R.string.6m_label
},
ONE_YEAR {
override fun getLabelId(): Int =
R.string.1y_label
},
THREE_YEARS {
override fun getLabelId(): Int =
R.string.3y_label
},
FIVE_YEARS {
override fun getLabelId(): Int =
R.string.5y_label
},
MAX {
override fun getLabelId(): Int =
R.string.max_label
};
}
我有一個自定義可組合我正在處理我想要使其通用的地方(使用型別引數而不是硬編碼的東西)但我正在努力尋找一種方法來實作這個通用型別引數,以便型別引數必須是一個繼承的 Enum我的界面LabelledEnum。
到目前為止,我的可組合看起來像這樣:
@Composable
inline fun <reified T : Enum<T>> CustomTabRow(
selectedEnum: T,
crossinline onEnumSelected: (T) -> Unit,
modifier: Modifier = Modifier,
) {
// Things happen here
}
有沒有辦法確保型別引數T是EnumAND 繼承自LabelledEnum?
如果沒有,我將使用一種解決方法,但如果可能的話,我真的更愿意完成這項作業
uj5u.com熱心網友回復:
Kotlin 有一種where語法來表達這樣的約束。
@Composable
inline fun <reified T> CustomTabRow(
selectedEnum: T,
crossinline onEnumSelected: (T) -> Unit,
modifier: Modifier = Modifier,
) where T : Enum<T>, T : LabelledEnum {
// Things happen here
}
請注意,您必須移至T : Enum<T>該where子句。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/409899.html
標籤:
上一篇:android,為什么在隱蔽到kotlin后單元測驗失敗
下一篇:Kotlin函式覆寫空值檢查
