代码之家  ›  专栏  ›  技术社区  ›  user1785730

如何在POJO的层次结构中向下传递上下文?

  •  1
  • user1785730  · 技术社区  · 7 年前

    我已经将我的应用程序的功能抽象为许多不同的POJO。现在,下面的一些POJO需要访问 Context SharedPreferences

    更具体地说,请考虑以下示例:

    Activity {
        B b;
    }
    
    B {
        C c;
    }
    
    C {
        method() {
            SharedPreferences.readSomeValue();
        }
    }
    

    我的活动使用POJO B,而POJO B又使用POJO C,需要从中读取值 共享引用 . 我如何授予C访问权限 共享引用 ?

    显而易见的解决办法是将其从 Activity 通过B到C。然而,这将需要将B类与 共享引用 为了将其传递给C.B本身,不需要访问 共享引用 . 我觉得这种做法非常丑陋。

    我修补过的另一个解决方案是有一个 public static 变量存储在某个地方 并从任何地方访问它们。这种解决方案不仅同样丑陋,而且可能导致 NullPointerException 如果从不同的活动在不同的层次结构中访问C,则为s。

    还有别的办法吗?

    2 回复  |  直到 7 年前
        1
  •  0
  •   Abdullah Tellioglu    7 年前

    处理POJO类的单例类怎么样?

    public class AppVariables{
        private static AppVariables instance = new AppVariables();
        private Map<String,Object> map;
        public static AppVariables getInstance(){
             return instance;
        }
        private AppVariables(){
           map = new HashMap<>();
        }
        public void add(String key, Object value){
             map.put(key,value);
        }
        public Object get(String key){
            return map.get(key);
        }
    
        //In your A class
        AppVariables.getInstance().add("AVariable",A);
    
        //In your C class
        Object obj = AppVariables.getInstance().get("AVariable");
        //Now you can receive your variable in Activity C or any other java class
    }
    
        2
  •  0
  •   user1785730    6 年前

    Initializer 处理初始化的:

    public class Initializer {
        public static void init(Context context) {
            A.init(context.getResources());
            B.init(context);
            C.init(PreferenceManager.getDefaultSharedPreferences(context));
        }
    }
    

    onCreate() 方法:

    Initializer.init(this);