我正在开展一项任务,创建一个 API 来应用字符串属性,这些属性可以表示为 Enum、Int、String 以及其他一些类型。
所以我尝试编写此类:
object Configuration {
inline fun <reified T> get(context: Context, propertyName: String): T {
val propertyStringValue = context.config[propertyName]
?: throw InvalidConfigurationException("Unable to access property $propertyName")
if (T::class.isSubclassOf(Enum::class)) {
// how can I convert it to enum by it's class name?
} else if (T::class.isSubclassOf(String::class)) {
// convert to string
} else if (T::class.isSubclassOf(Integer::class)) {
// convert it integer
}
}
}
enum class BuildingLevel{
FIRST,
SECOND,
...
}
enum class StreetType {
OPEN,
ISOLATED,
...
}
鉴于属性名称是STREET_TYPE
并context.config["STREET_TYPE"]
返回OPEN
我希望Configuration.get<StreetType>("STREET_TYPE")
返回枚举条目StreetType.OPEN
并Configuration.get<String>("STREET_TYPE")
返回OPEN
字符串。
enum
如果我想将字符串转换为具有代表某个枚举类的具体化泛型的枚举条目,我应该在 if 分支中做什么?