JavaFx:fxmlLoader.load返回Parent?

时间:2015-06-04 17:26:34

标签: java javafx

我在fxml文件的根级别有ScrollPane,我有以下代码:

import javafx.scene.Parent;
...
parent = (Parent)fxmlLoader.load(getFxmlStream("my.fxml"));
if (parent.getClass().isAssignableFrom(Parent.class)){
    System.out.println("THIS IS PARENT");
}else{
    System.out.println("THIS IS NOT PARENT");//THIS WILL BE PRINTEED
}

为什么load函数返回的内容不能从Parent类赋值?

1 个答案:

答案 0 :(得分:1)

来自Javadocs for isAssignableFrom

  

确定此Class对象所表示的类或接口   与...相同或者是超类或超级接口   由指定的Class参数表示的类或接口。

因此,您正在测试从FXML加载器获取的对象的运行时类型是否等于Parent超类。如果它是ParentVBoxBorderPane等)的严格子类,那么这将是false

如果你想测试你的价值是否是某种Parent,那么通常的做法就是instanceof

if (parent instanceof Parent)){
    System.out.println("THIS IS PARENT");
}else{
    System.out.println("THIS IS NOT PARENT");//THIS WILL BE PRINTEED
}

如果您想使用getClass()isAssignableFrom(),那么您的方法就错了:

if (Parent.class.isAssignableFrom(parent.getClass())){
    System.out.println("THIS IS PARENT");
}else{
    System.out.println("THIS IS NOT PARENT");//THIS WILL BE PRINTEED
}

虽然我建议采用标准instanceof方法。

另请注意,您可以使用FXML来加载任何对象,因此无法保证您获得的是Parent的子类。