Я думаю, что проблема в том, что вы определили свой метод replaceTransaction
как универсальный, но в этом методе вы вообще не используете T
, поэтому вывод типа не знает, какой тип использовать на месте T
.
Чтобы дать вам более простой пример, это вызовет ту же ошибку:
fun <T> foo() {
println("Hello, world!")
}
fun main() {
foo()
}
Это происходит потому, что T
не может быть выведен, поэтому вам нужно явно указать, какой тип использовать (даже если он не используется вообще в foo
):
fun main() {
foo<Unit>() // I used Unit, but any other type would do
}
Учитывая это, вам вообще нужен T
в вашем коде? И FragmentRight
, и FragmentLeft
простираются от Fragment
, поэтому, если вам не нужно использовать определенные функции этих классов, вы можете отказаться от T
и использовать родительский тип Fragment
(как вы уже делаете).