【问题标题】:variable is null although It was set变量为空,尽管它已设置
【发布时间】:2018-09-08 13:03:48
【问题描述】:

我构建了一个包含一些这样的对象:

public class TestThis implements Listener{

    private EventsManager eventsManager;
    private ConfigManager configManager;

    public TestThis() {
        eventsManager = new EventsManager();
        eventsManager.addListener(this);
        configManager = new ConfigManager(this);
    }

    public ConfigManager getConfigManager() {
        return configManager;
    }

    @Override
    public void configLoadedSuccessfully(Event event) {
        System.out.println(this.configManager); //OUTPUT NULL
        System.out.println(this.getConfigManager());//OUTPUT NULL
    }
}

configManager 对象存在问题。 在构造中,一切正常,但 configLoadedSuccessfully 事件 configManager 为 null 并且它的 null evrywhere。

监听器代码:

public interface Listener{
    public void configLoadedSuccessfully(Event event);
}

【问题讨论】:

  • 您的大写已关闭,不是this.ConfigManager,而是this.configManager。不确定这是否是问题,但我知道这很重要。
  • @HovercraftFullOfEels 这也是个问题,但没有解决。
  • 能否展示调用代码和监听接口?
  • 我怀疑eventsManager.addListener(this); 调用的代码最终会在参数上调用configLoadedSuccessfully(在本例中为this)。然后将解释 null,因为 configManager 仅在此调用之后分配。所以你可能需要在构造函数中交换最后两个语句的顺序
  • @Razdom 如果这是问题所在,那么您需要重新设计代码以消除循环依赖。

标签: java object events null listener


【解决方案1】:

我添加了一个开始加载配置并更改 var`s create 顺序的函数。

    public class TestThis implements Listener{

    private EventsManager eventsManager;
    private ConfigManager configManager;

    public TestThis() {
        eventsManager = new EventsManager();
        configManager = new ConfigManager(this);
        eventsManager.addListener(this);
        configManager.load();
    }

    public ConfigManager getConfigManager() {
        return configManager;
    }

    @Override
    public void configLoadedSuccessfully(Event event) {
        System.out.println(this.configManager);
        System.out.println(this.getConfigManager());
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-11
    • 1970-01-01
    • 2017-07-14
    • 2019-07-31
    • 2021-04-20
    相关资源
    最近更新 更多