[英]Generic Enum type parameter with required interface
我有一个如下所示的界面:
interface LabelledEnum {
fun getLabelId(): Int
}
我在枚举 class 中继承了这个接口,如下所示:
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
是Enum
并且继承自LabelledEnum
?
如果没有,我将使用一种解决方法,但如果可能的话,我真的更愿意完成这项工作
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
子句。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.