如何使用在Kotlin中返回带有类型参数的子类型的方法创建类?
我很难理解泛型/类型参数在Kotlin中是如何工作的。我正在开发一个(相当复杂)的应用程序,它在编译过程中会抛出一些非常混乱的错误消息。我已经将下面的内容简化为将再现错误的代码的最小数量 我有一个接口和两个抽象类:如何使用在Kotlin中返回带有类型参数的子类型的方法创建类?,kotlin,generics,type-parameter,Kotlin,Generics,Type Parameter,我很难理解泛型/类型参数在Kotlin中是如何工作的。我正在开发一个(相当复杂)的应用程序,它在编译过程中会抛出一些非常混乱的错误消息。我已经将下面的内容简化为将再现错误的代码的最小数量 我有一个接口和两个抽象类: 界面播放器{ 趣味游戏 } 抽象类设备{ 抽象趣味getPlayer():T } 抽象类设备工厂{ 抽象趣味创建():设备 } 当我试图创建一个实现DeviceFactory的类时,问题就出现了: 类MyDeviceFactory:DeviceFactory(){ 类MyPlaye
界面播放器{
趣味游戏
}
抽象类设备{
抽象趣味getPlayer():T
}
抽象类设备工厂{
抽象趣味创建():设备
}
当我试图创建一个实现DeviceFactory
的类时,问题就出现了:
类MyDeviceFactory:DeviceFactory(){
类MyPlayer:Player{
玩乐{
println(“[此处播放声音]”)
}
}
类MyDevice:Device(){
覆盖有趣的getPlayer()=MyPlayer()
}
重写fun create()=MyDevice()
}
最后一行代码是出现问题的地方,产生以下错误消息:
Conflicting overloads: public open fun create(): MyDeviceFactory.MyDevice defined in MyDeviceFactory,
public abstract fun create(): Device defined in DeviceFactory
Return type of 'create' is not a subtype of the return type of the overridden member
'public abstract fun create(): Device defined in DeviceFactory'
没有骰子:
Type mismatch: inferred type is MyDeviceFactory.MyDevice but Device was expected
类型不匹配:推断的类型为MyDeviceFactory.MyDevice,但应为设备
如何创建一个派生自
DeviceFactory
并返回MyDevice
实例的类?您需要在其类上声明DeviceFactory
的类型:
abstract class DeviceFactory<T : Player> {
abstract fun create(): Device<T>
}
抽象类DeviceFactory{
抽象趣味创建():设备
}
然后您可以定义一个返回具体玩家的工厂:
类MyDeviceFactory:DeviceFactory(){
重写趣味创建():Device=MyDevice()
}
out
是reduntand,将导致编译error@IR42你是对的,out
是多余的。我更新了我的答案。谢谢虽然这不会导致我的代码中出现编译错误。