Предупреждение верно. Потому что вы можете заполнить универсальный параметр злым аргументом, подобным этому:
class ClassC : ClassA<ClassB>()
Теперь вы можете создать ClassCastException
, просто позвонив fooA
на ClassC
:
fun main(args: Array<String>) {
val fooA = ClassC().fooA()
}
Вот почему fooA
небезопасен.
Такого рода ошибки не могут быть обнаружены во время компиляции, и поэтому есть предупреждение.
Конечно, вы можете вручную убедиться, что ваш код не заполняет общий параметр неверным образом, и отключить предупреждение.