Вам нужно просто набрать
class MySubclass(...) : BaseClass<String>(...) { ... }
Там, где вы ставите <String>
сразу после MyClass
, вы определили обобщенный тип c для своего подкласса с именем String
. И поскольку он имеет то же имя, что и реальный класс String
, это сбивает с толку. Обычно для общего типа c используется одна заглавная буква. То, что вы написали, будет эквивалентно:
class MySubclass<T>: BaseClass<T>()
, что недопустимо, поскольку ваш тип, возможно, является Any?
, что не удовлетворяет требованию, чтобы тип расширялся от ненулевого значения Any
.
<String: Any>
работает, потому что это похоже на определение типа <T: Any>
, который позволяет ему соответствовать вашим необнуляемым требованиям в базовом классе.