Проблема не в параметре функции FXMLLoader.load
(который является java.net.URL
объектом, возвращаемым javaClass.getResource
).Дело в том, что эта функция возвращает универсальный тип:
public static <T> T load(URL location)
Компилятору Kotlin необходимо знать, каким будет тип вашей переменной root
(поскольку выне определено явно), но он не может знать, так как в коде нет ничего, что позволило бы ему сделать вывод об этом.
Быстрый Google вернул этот пример, в котором этот код находится вit (в Java):
Parent root = FXMLLoader.load(getClass().getResource("fxml_example.fxml"));
Как вы можете видеть здесь, переменная root
имеет тип Parent
.Так что вам нужно каким-то образом предоставить этот тип (то есть то, что вы ожидаете от функции load
).Вот два разных способа сделать это:
- Укажите тип явно при объявлении переменной:
val root: Parent = FXMLLoader.load(fxml)
- Укажите универсальный тип при вызове метода:
val root = FXMLLoader.load<Parent>(fxml)
Обратите внимание также, что в вашем файле build.gradle
в вашем репозитории github есть ошибка, которая означает, что код не компилируется сразу, когда я его получил:
compile "org.openjfx.javafx.fxml:11:$platform"
должно быть compile "org.openjfx:javafx-fxml:11:$platform"
(одна из точек должна быть двоеточием).