Java FXML导入静态嵌套类

Java FXML导入静态嵌套类,java,javafx,fxml,Java,Javafx,Fxml,假设我有一个定制的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"

假设我有一个定制的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/
fxmloader
中的一个错误,无法识别静态嵌套类的完全限定名?或者它是IntelliJ中的一个bug,无法识别(文档记录不良的?)合法导入

我倾向于认为这是Intellij方面的问题,而且他们可能使用了糟糕的词语。在导入和使用完全限定名称时,使用
而不是
$
与Java源代码一致。但是,即使导入,您仍然必须使用
而不是
,以免它引发异常,说
不是有效类型。这与Java源代码不一致,而且Intellij也不完全符合FXML规范。例如:;当使用它时,Intellij会将其标记为无效。可能应该在这里发布之前搜索错误-有一份8个月前的报告:还有一份关于我在第二条评论中提到的问题的错误报告: