enum class我的Kotlin 應用程式中有很多。它們都代表我需要在 FPGA 板之間進行轉換EnumSet<>以及UInt與 FPGA 板進行串行通信的位標志。
我怎樣才能提供一些適用于所有這些列舉的擴展方法?
列舉不允許類繼承。EnumSet 不能參考介面。我不確定還能嘗試什么。
謝謝!
enum class ReadFlag(val bits: UInt) {
DATA_READY(1u)
BUSY(2u)
}
typealias ReadFlags = EnumSet<ReadFlag>
enum class WriteFlag(val bits: UInt) {
UART_RESET(1u)
BUSY(2u)
PAGE_DATA(4u)
}
typealias WriteFlags = EnumSet<WriteFlag>
fun ReadFlags.asUInt(): UInt =
this.fold(0u) { acc, next -> acc or next.bits }
fun WriteFlags.asUInt(): UInt =
this.fold(0u) { acc, next -> acc or next.bits }
這會導致此錯誤:
error: platform declaration clash: The following declarations have the same JVM signature (asUInt(Ljava/util/EnumSet;)I):
uj5u.com熱心網友回復:
為普通成員寫一個介面:
interface Flags {
val bits: UInt
}
實作介面:
enum class ReadFlag(override val bits: UInt): Flags {
DATA_READY(1u),
BUSY(2u)
}
enum class WriteFlag(override val bits: UInt): Flags {
UART_RESET(1u),
BUSY(2u),
PAGE_DATA(4u)
}
然后你可以讓你的asUInt通用:
fun <E> EnumSet<E>.asUInt(): UInt where E : Enum<E>, E: Flags =
this.fold(0u) { acc, next -> acc or next.bits }
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/516377.html
標籤:科特林仿制药位操作枚举集
下一篇:制作陣列來保存多型泛型
