有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Java中跨类共享变量(持久性和并发性无关紧要)

我需要在许多类中共享大量变量。到目前为止,我一直在这些类之间传递一个映射作为参数,但这变得很乏味。我唯一能想到的其他方法是bean,这是一种过度杀伤力,因为我不需要持久性,一个数据库,出于同样的原因,这也是一种过度杀伤力,以及以下两种方法。(请注意,并发性不是本项目的问题。)在单例方法和接口方法之间,您建议使用哪种方法?为什么?你知道另一种方法吗?我想有更好的方法来做我正在尝试的事情。我的主要要求是可靠性和效率。在简单的测试中,以下两种方法都满足我的要求,但我不知道它们的可扩展性有多好。多谢

方法1(单例):

package development;

import java.util.TreeMap;
import java.util.Map;

public class Param {

  private Map<Object, Object> params = new TreeMap<Object, Object>();
  private final static Param param = new Param();

  private Param() { System.out.println("<instantiated params>"); };

  public static Param getInstance() {
    return param;
  }

  public void addParam(Object k, Object v) {
    params.put(k,  v);
  }

  public void removeParam(Object k) {
    params.remove(k);
  }

  public Object getParam(Object k) {
    return params.get(k);
  }

  public void printParams() {
    for(Map.Entry<Object, Object> kv : params.entrySet()) {
      System.out.println(kv.getKey() + "->" + kv.getValue());
    }
  }

}


package development;

public class Tester {

  public void doTest() {
    Param.getInstance().addParam("Key 1", "Value 1");
    Param.getInstance().addParam("Key 2", "Value 2");
    Param.getInstance().addParam("Key 3", "Value 3");
    new C1().addAParam();
    new C2().addAParam();
    new C3().addAParam();
    Param.getInstance().printParams();
  }

  public static void main(String[] args) {
    new Tester().doTest();
  }

  private class C1 {
    public void addAParam() {
      Param.getInstance().addParam("Key 4", "Value 4");
    }  
  }

  private class C2 {
    public void addAParam() {
      Param.getInstance().addParam("Key 5", "Value 5");
    }  
  }

  private class C3 {
    public void addAParam() {
      Param.getInstance().addParam("Key 6", "Value 6");
    }  
  }

}

Result:
<instantiated params>
Key 1->Value 1
Key 2->Value 2
Key 3->Value 3
Key 4->Value 4
Key 5->Value 5
Key 6->Value 6

方法2(接口):

package development;

import java.util.HashMap;
import java.util.Map;

public interface IParam {
  Map<Object, Object> params = new HashMap<Object, Object>();
}


package development;

import java.util.Map;

public class Tester2 {

  public void doTest() {
    IParam.params.put("Key 1", "Value 1");
    IParam.params.put("Key 2", "Value 2");
    IParam.params.put("Key 3", "Value 3");
    new C1().addAParam();
    new C2().addAParam();
    new C3().addAParam();
    for(Map.Entry<Object, Object> kv : IParam.params.entrySet()) {
      System.out.println(kv.getKey() + "->" + kv.getValue());
    }
  }

  public static void main(String[] args) {
    new Tester2().doTest();
  }

  private class C1 {
    public void addAParam() {
      IParam.params.put("Key 4", "Value 4");
    }  
  }

  private class C2 {
    public void addAParam() {
      IParam.params.put("Key 5", "Value 5");
    }  
  }

  private class C3 {
    public void addAParam() {
      IParam.params.put("Key 6", "Value 6");
    }  
  }

}

Result:
Key 1->Value 1
Key 2->Value 2
Key 3->Value 3
Key 4->Value 4
Key 5->Value 5
Key 6->Value 6

共 (0) 个答案