假设我有一个自定义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中的错误,没有识别出(记录不充分?)合法的进口?