类型参数不在其范围内预期:Any Found:String



给定

open class BaseClass<T: Any>(...) { ... }
class MySubclass<String>(...) : BaseClass<String>(...) { ... }

我得到错误

Type argument is not within its bounds 
Expected: Any 
Found: String

安卓工作室为我提供Add 'kotlin.Any' as upper bound for String,它导致

// Note the <String: Any> instead of <String>
class MySubclass<String: Any>(...) : BaseClass<String>(...)

但我不明白为什么<String>不好,而<String: Any>好?

您只需要键入

class MySubclass(...) : BaseClass<String>(...) { ... }

<String>放在MyClass之后,就为子类定义了一个名为String的泛型类型。由于它与实际的类String具有相同的名称,所以它令人困惑。通常一个大写字母用于泛型类型。你写的相当于:

class MySubclass<T>: BaseClass<T>()

这是不允许的,因为您的类型可能是Any?,这不能满足该类型从不可为null的Any扩展的要求。

<String: Any>之所以有效,是因为它就像定义了一个类型<T: Any>,使它能够满足基类中不可为null的要求。

相关内容

最新更新