Java 父对象的孙子实例返回false
在检查以下类之间的关系时,无法找出代码返回false的原因Java 父对象的孙子实例返回false,java,javafx,Java,Javafx,在检查以下类之间的关系时,无法找出代码返回false的原因 public abstract class Controller { public Controller(){}; public abstract void init(); } public class OperationController<T> extends Controller { public OperationController(){}; public void init()
public abstract class Controller {
public Controller(){};
public abstract void init();
}
public class OperationController<T> extends Controller {
public OperationController(){};
public void init() {
// here something happens
};
}
public class DailyOperationController extends OperationController<DailyOperation> {
public DailyOperationController (){};
public void init() {
// here something happens
};
}
如果条件在检查OperationController对象时返回true,在检查DailyOperationController对象时返回false。我怀疑主要的问题是我无法理解抽象的关键字概念,所以我将感谢您的帮助。我希望能够初始化OperationController对象和DailyOperationController。您是否确认
loader.getController()
是控制器
,更重要的是,它不是null
?从逻辑上讲,如果loader.getController()
返回一个Controller
,代码应该可以工作。是的,这是一个NullPointerException。加载程序加载时没有问题,但父级为空。搜索了15分钟,但不知道如何修复它。原因一定很普遍,找到了祸根。我对视图使用了相同的结构(OperationController相关的FXML文件包括DailyOperationController相关的FXML文件),当我调用controller OperationController并执行其init()时,不会调用DailyOperationController init()。如果不调用FXMLLoader.load
实例方法,则不会调用DailyOperationController init()(或者您将setController
与非null
参数一起使用),无论在这种情况下使用的是什么类型,控制器
属性都是null
instanceof
都会产生false。既然您没有将任何信息作为参数传递给init
,或者之前没有调用传递信息的任何其他方法,为什么不简单地使用初始化
?放弃了可初始化的接口bec因为我想做的一切都必须在场景创建后设置。
//somewhere in Main class
FXMLLoader loader = new FXMLLoader(Main.class.getClassLoader().getResource(panel.getFxmlPath()));
if(loader.getController() instanceof Controller)
((Controller) loader.getController()).init();
//somewhere in Main class