Предположим, у меня есть пользовательский элемент управления JavaFX Foo
со специализированным регистром, реализованным как вложенный статический класс Foo$Bar
:
package com.acme;
import javafx.scene.control.Control;
public class Foo extends Control {
public static class Bar extends Foo {
}
}
Теперь я могу захотеть использовать этот элемент управления в FXML, поэтому яожидайте, что я должен сделать что-то вроде этого:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import com.acme.Foo$Bar?>
<VBox xmlns="http://javafx.com/javafx/8.0.191" xmlns:fx="http://javafx.com/fxml/1">
<children>
<Foo.Bar/>
</children>
</VBox>
Однако, это приводит к тому, что FXML может быть выгружен, что вызывает ошибку
javafx.fxml.LoadException: Foo.Bar недопустимый тип.
Любопытно, если я изменю импорт на следующее:
<?import com.acme.Foo.Bar?>
FXML загружается правильно, но моя IDE (IntelliJ) помечает импорт как ошибочный - я склонен согласиться сэто, как кажется, спецификация FXML требует импорта, используя полное имя класса, которое в этом случае будет com.acme.Foo$Bar
, а не com.acme.Foo.Bar
.
Так это ошибка в JavaFX / FXMLLoader
, не распознающая полностью определенные имена статических вложенных классов?Или это ошибка в IntelliJ, не признающая (плохо документированный?) Легальный импорт?