で型の不一致私はジェネリックを使用して、次のコードがあります。Kotlinのジェネリック医薬品:ジェネリックマップパラメータ
abstract class Event(val name: String)
interface ValueConverter<E : Event> {
fun convert(event: E): Float
fun getEventClass(): Class<E>
}
class ValueConverters {
private val converters = HashMap<String, ValueConverter<Event>>()
fun <E : Event> register(converter: ValueConverter<E>) {
converters.put(converter.getEventClass().name, converter)
}
fun unregister(eventClass: Class<Event>) {
converters.remove(eventClass.name)
}
fun <E : Event> convert(event: E): Float {
return converters[event.javaClass.name]?.convert(event) ?: 0.0f
}
fun clear() {
converters.clear()
}
}
しかし、この行には:
converters.put(converter.getEventClass().name, converter)
それがエラーを与える:
Type mismatch. Expected ValueConverter<Event>. Found ValueConverter<E>.
私もこのようなものを試しました:
以下のようなものでValueConverters.register()
を呼び出すとき
しかし、問題は次のとおりです。
class SampleEvent1 : Event(name = SampleEvent1::class.java.name)
class SampleValueConverter1 : ValueConverter<SampleEvent1> {
override fun convert(event: SampleEvent1): Float = 0.2f
override fun getEventClass(): Class<SampleEvent1> = SampleEvent1::class.java
}
converters.register(converter = SampleValueConverter1())
また、同様の型の不一致のエラーが発生します。
ValueConverterを実装しているクラスを使用できるようにジェネリックスを宣言し、イベントを拡張するクラスを受け入れるにはどうすればよいですか?
ありがとうございます!できます。 –