我是 Kotlin 的新手,感謝您的耐心等待!
我正在處理下面的代碼,以嘗試確定是否可以將定義的列舉值與預期的類和型別相關聯以在其他地方參考,并使用該定義的關系來消除從 5 到的“when”子句1.
我遇到的問題是使用尖括號參考型別的行,有沒有辦法解決它,使用我定義的列舉值?
GenericCsvParser<SnowflakeReserveItem>()
我想去的地方是
fun persistSnowflakeData(
inputStream: InputStream,
dataType: SnowflakeDataType,
){
val sfItems = GenericCsvParser<dataType.value>()
.parse(inputStream, datatype.value)
.toList()
snowflakeItemRepository.saveAll(sfItems)
}
現在的代碼:
fun persistSnowflakeData(
inputStream: InputStream,
dataType: SnowflakeDataType,
) {
when (dataType) {
SNOWFLAKE_RESERVE_BOOKING -> {
val sfItems = GenericCsvParser<SnowflakeReserveItem>()
.parse(inputStream, SnowflakeReserveItem::class.java)
.toList()
snowflakeItemRepository.saveAll(sfItems)
}
SNOWFLAKE_MEMBERSHIP_TERM -> {
val sfItems = GenericCsvParser<SnowflakeMembershipTerm>()
.parse(inputStream, SnowflakeMembershipTerm::class.java)
.toList()
snowflakeMembershipTermRepository.saveAll(sfItems)
}
SNOWFLAKE_MEMBERSHIP_BOOKING -> {
val sfItems = GenericCsvParser<SnowflakeMembershipOrderBooking>()
.parse(inputStream, SnowflakeMembershipOrderBooking::class.java)
.toList()
snowflakeMembershipItemRepository.saveAll(sfItems)
}
SNOWFLAKE_OFFLINE_SALE_BOOKING -> {
val sfItems = GenericCsvParser<SnowflakeOfflineItem>()
.parse(inputStream, SnowflakeOfflineItem::class.java)
.toList()
snowflakeOfflineItemRepository.saveAll(sfItems)
}
SNOWFLAKE_ONLINE_SALE_BOOKING -> {
val sfItems = GenericCsvParser<SnowflakeOnlineItem>()
.parse(inputStream, SnowflakeOnlineItem::class.java)
.toList()
snowflakeOnlineItemRepository.saveAll(sfItems)
}
}
}
enum class SnowflakeDataType(clazz: Class<*>) {
SNOWFLAKE_RESERVE_BOOKING(SnowflakeReserveItem::class.java),
SNOWFLAKE_MEMBERSHIP_TERM(SnowflakeMembershipTerm::class.java),
SNOWFLAKE_MEMBERSHIP_BOOKING(SnowflakeMembershipOrderBooking::class.java),
SNOWFLAKE_OFFLINE_SALE_BOOKING(SnowflakeOfflineItem::class.java),
SNOWFLAKE_ONLINE_SALE_BOOKING(SnowflakeOnlineItem::class.java)
}
uj5u.com熱心網友回復:
我建議使用Reified type parameters
interface ItemRepository<T> {
fun saveAll(item: T)
}
//...
inline fun <reified T> persistSnowflakeData(
inputStream: InputStream,
repository: ItemRepository<T>,
) {
val items = GenericCsvParser<T>()
.parse(inputStream, T::class.java)
.toList()
repository.saveAll(items)
}
snowflakeItemRepository,snowflakeMembershipTermRepository和其他專案存盤庫應該實作ItemRepository.
然后您可以按如下方式呼叫該函式:
//...
persistSnowflakeData(inputStream, snowflakeItemRepository)
//...
persistSnowflakeData(inputStream, snowflakeMembershipTermRepository)
//...
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/528369.html
標籤:科特林班级仿制药枚举
上一篇:可識別為泛型和func引數
