Аргумент типа находится за его пределами Ожидаемый: Любой найден: Строка - PullRequest
0 голосов
/ 24 апреля 2020

Учитывая

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

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

Я получаю ошибку

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

Android Студия предлагает мне Add 'kotlin.Any' as upper bound for String, что приводит к

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

Но я не понимаю Не понимаю, почему <String> не в порядке, но <String: Any> это хорошо?

1 Ответ

1 голос
/ 24 апреля 2020

Вам нужно просто набрать

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

Там, где вы ставите <String> сразу после MyClass, вы определили обобщенный тип c для своего подкласса с именем String. И поскольку он имеет то же имя, что и реальный класс String, это сбивает с толку. Обычно для общего типа c используется одна заглавная буква. То, что вы написали, будет эквивалентно:

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

, что недопустимо, поскольку ваш тип, возможно, является Any?, что не удовлетворяет требованию, чтобы тип расширялся от ненулевого значения Any.

<String: Any> работает, потому что это похоже на определение типа <T: Any>, который позволяет ему соответствовать вашим необнуляемым требованиям в базовом классе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...