gpt4 book ai didi

JavaFx:fxmlLoader.load 返回父级?

转载 作者:行者123 更新时间:2023-12-01 11:28:01 25 4
gpt4 key购买 nike

我在 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
}

为什么加载函数返回的内容不能从父类分配?

最佳答案

来自Javadocs for isAssignableFrom :

Determines if the class or interface represented by this Class object is either the same as, or is a superclass or superinterface of, the class or interface represented by the specified Class parameter.

因此,您正在测试从 FXML 加载器获取的对象的运行时类型是否等于 Parent 或其父类(super class)。如果它是 Parent 的严格子类(VBoxBorderPane 等),那么这将为 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 的子类。

关于JavaFx:fxmlLoader.load 返回父级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30650372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com