我在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类赋值?
答案 0 :(得分:1)
来自Javadocs for isAssignableFrom
:
确定此Class对象所表示的类或接口 与...相同或者是超类或超级接口 由指定的Class参数表示的类或接口。
因此,您正在测试从FXML加载器获取的对象的运行时类型是否等于Parent
的超类。如果它是Parent
(VBox
,BorderPane
等)的严格子类,那么这将是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
的子类。