FXML импортирует статический вложенный класс - PullRequest
0 голосов
/ 18 декабря 2018

Предположим, у меня есть пользовательский элемент управления 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, не признающая (плохо документированный?) Легальный импорт?

...