Ben generic'leri kullanan aşağıdaki kod:KOTLIN en Jenerik: jenerik haritası parametrede tür uyuşmazlığı
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()
}
}
Ama bu hat üzerinde:
:Type mismatch. Expected ValueConverter<Event>. Found ValueConverter<E>.
converters.put(converter.getEventClass().name, converter)
bir hata veriyor
Ayrıca böyle bir şey denedim:
class ValueConverters {
private val converters = HashMap<String, ValueConverter<Event>>()
fun register(converter: ValueConverter<Event>) {
converters.put(converter.getEventClass().name, converter)
}
fun unregister(eventClass: Class<Event>) {
converters.remove(eventClass.name)
}
fun convert(event: Event): Float {
return converters[event.javaClass.name]?.convert(event) ?: 0.0f
}
fun clear() {
converters.clear()
}
}
Fakat böyle bir şeyle ValueConverters.register()
çağrılırken sorunudur:
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())
Ayrıca benzer tür uyuşmazlığı hatası veriyor.
Jenerik değerlerini, ValueConverter uygulayan ve Event'i genişleten herhangi bir sınıfı kabul eden herhangi bir sınıfı kullanabilmem için nasıl bildirmeliyim?
Teşekkürler! İşe yarıyor. –