AndroidAnnotations 将 Singleton class 对象访问到其他 class 静态方法中
AndroidAnnotations access Singleton class object into other class static method
从 MyActivity 调用:
- MyClass.getInstance();
- 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
实例注入另一个组件并从那里使用它
从 MyActivity 调用:
- MyClass.getInstance();
- 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
实例注入另一个组件并从那里使用它