Вы не указали никакой верхней границы для T
. Поэтому используется подразумеваемая верхняя граница: T: Any?
.
Функция bar()
принимает Object
, а Any?
не совместима с ней. Object
является одним конкретным подтипом Any?
.
Другим конкретным подтипом Any?
является Int
, и он также не является подтипом Object
. Не обнуляемый Int
компилируется в примитив JVM типа int
, который явно не является экземпляром Object
.
Наконец, вам следует пересмотреть использование Object
в любом месте Котлина; моя IDE сразу помечает его предупреждением. Итак, объявляем
fun bar(x: Any?) { }
или, если вы хотите применить ненулевое значение,
fun bar(x: Any) { }
В последнем случае вы также должны ограничить верхнюю границу для T
:
fun <T: Any> foo(arg: T) { ... }
Однако пример кода, который вы разместили, даже не мотивирует универсальный параметр T
, поэтому, возможно, все, что вам нужно, это
fun foo(x: Any) { ... }