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

时间:2015-05-26 12:09:02

标签: android singleton android-annotations

从MyActivity,请致电:

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

    @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注释将单例类对象访问到其他类静态方法中。注:AA版本3.3.1

1 个答案:

答案 0 :(得分:0)

我担心您错误地使用AA @EBean。您是否阅读了documentation

您不必自己编写getInstance()方法,AA将生成适当的方法,在其中进行注入,并在将bean注入其他组件时自动调用它。你有一个NullPointerException,因为你用你自己的getInstance()方法创建了bean,因此没有进行AA注射。但实际上你在doStuff()中遇到编译错误,因为你正在访问静态方法中的实例字段...所以我假设manager字段是静态的,对吧?你不应该在单例中使用静态字段/方法,单例的概念只是一个实例存在,所以使用静态字段/方法是多余的,也是令人困惑的。

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

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