AndroidAnnotations 将 Singleton class 对象访问到其他 class 静态方法中

AndroidAnnotations access Singleton class object into other class static method

从 MyActivity 调用:

  1. MyClass.getInstance();
  2. MyClass.doStuff();

...

@EBean(scope = EBean.Scope.Singleton)  
public class MyClass {
    @Bean
    MyManager manager;

    public static void doStuff(){   
        manager.show();
        // null pointer exception for the manager  why ? how to access it ?
    }  
     public static MyClass getInstance() {
        if (_instance == null) {
            _instance = new MyClass();
        }
        return  _instance;
    }
}

...

@EBean(scope = EBean.Scope.Singleton)  
public class MyManager {
    public void show(){     }
}

Android 注释将单例 class 对象访问到其他 class 静态方法中。注:AA 版本 3.3.1

恐怕您使用 AA @EBean 不正确。你读过documentation吗?

你不用自己写getInstance()方法,AA会生成合适的方法,在里面做注入,注入bean到其他组件时自动调用。你得到一个 NullPointerException 因为你用你自己的 getInstance() 方法创建了这个 bean,所以没有执行 AA 注入。但实际上你在 doStuff() 中遇到编译错误,因为你正在访问静态方法中的实例字段......所以我假设 manager 字段是静态的,对吧?你不应该在单例中使用 static fields/methods ,单例的概念是一个实例只存在,所以使用 static fields/methods 是多余的,也很混乱。

您可以通过以下任一方式解决问题:

  • 通过手动调用 MyClass_.getInstance(context) 创建 MyClass 的实例,然后使用它
  • 使用 @Bean 注释将 MyClass 实例注入另一个组件并从那里使用它