给定
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的要求。