मैं अपने कोड में एक परिदृश्य में जहाँ मैं एक वर्ग की तरह दो अलग-अलग प्रकार के लिए एक इंटरफ़ेस को लागू करने, इस उदाहरण की तरह होता है:कोटलिन में एक ही सामान्य इंटरफ़ेस से दो बार (अलग-अलग प्रकार के) से प्राप्त करने का कोई तरीका?
interface Speaker<T> {
fun talk(value: T)
}
class Multilinguist : Speaker<String>, Speaker<Float> {
override fun talk(value: String) {
println("greetings")
}
override fun talk(value: Float) {
// Do something fun like transmit it along a serial port
}
}
Kotlin इससे खुश नहीं है, का हवाला देते हुए:
Type parameter T of 'Speaker' has inconsistent values: kotlin.String, kotlin.Float
A supertype appears twice
मुझे पता है कि एक संभावित समाधान निम्नलिखित कोड को लागू करना है, जहां मैं इंटरफेस को <Any>
के साथ कार्यान्वित करता हूं और फिर अपने आप प्रकारों की जांच करता हूं और उन्हें अपने कार्यों में भेजता हूं।
interface Speaker<T> {
fun talk(value: T)
}
class Multilinguist : Speaker<Any> {
override fun talk(value: Any) {
when (value) {
is String ->
internalTalk(value)
is Float ->
internalTalk(value)
}
}
fun internalTalk(value: String) {
println(value)
}
fun internalTalk(value: Float) {
// Do something fun like transmit it along a serial port
}
}
हालांकि, का मानना है कि जैसे मैं प्रकार सुरक्षा और क्या वर्ग के लिए प्रयोग किया जाता है के बारे में संचार को हटाने कर रहा हूँ, और रेखा नीचे मुसीबत के लिए पूछ रहा है। Kotlin में इसे लागू करने के लिए एक बेहतर तरीका है? इसके अतिरिक्त - इसके पीछे तर्क क्या है जिस तरह से मैंने पहले नमूने में संकेत दिया था? इंटरफेस केवल हस्ताक्षरों का एक अनुबंध नहीं है जो मुझे लागू करने की आवश्यकता है, या क्या यहां कुछ ऐसा है जो मुझे जेनेरिक शामिल है?