java - java中如何向单例传递参数

标签 java singleton

我需要在我的网络应用程序中使用预先输入功能来显示数据库中的名称。我使用 Dojo 过滤 select 来显示名称。这些名称必须显示在多个jsp页面中。我有一个名为 getClientNames() 的 Java 类,它从数据库获取名称列表。根据条件列表的名称会有所不同。因此,我将根据执行查询的参数将参数传递给该 java 类。

例如,

 public class X{
public List<String> getNames(String param){
    if param.equals("x"){
    //query 1
    }
    else{
    //query 2
    }
    return clisntList;
}

我有一个 Singleton 类来调用 getNames 方法。

 public class ClassicSingleton {
private static ClassicSingleton instance = null;
List<String> clientList;
protected ClassicSingleton() {
    // Exists only to defeat instantiation.
}
public static ClassicSingleton getInstance() {
    if(instance == null) {
        instance = new ClassicSingleton();
    }
    return instance;
}

public List<String> getName(){
    X obj=new obj();
    this.clientList=obj.getNames(param);
    return this.clientList;
}
 }

我需要将参数传递给这个单例方法 getName 以获得正确的结果。我怎样才能实现它..

最佳答案

到底为什么要将 clientList 作为成员字段?您只能在 getName 内部访问它,您总是在使用它之前对其进行设置 - 除了阻止优化器和引入竞争条件之外,它实际上没有做任何事情!

clientList 移动到函数内部后,向 getName 添加参数并将其传递给 getNames 更有意义:

public List<String> getName(String param){
    X obj=new obj();
    List<String> clientList=obj.getNames(param);
    return clientList;
}

此外,这里没有理由使用单例模式,因为您并没有真正使用ClassicSingleton的状态。您可以简单地将 getName 设为静态方法:

public static List<String> getName(String param){
    X obj=new obj();
    List<String> clientList=obj.getNames(param);
    return clientList;
}

关于java - java中如何向单例传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21512578/

相关文章:

java - 并发读取文本文件并将数据放入数组的线程

java - JTextField 在 JPopupMenu 中不可编辑

Javax Transformer 在高并发环境下失败

c++ - Loki 的 SetLongevity 函数对我来说似乎不安全,是这样吗?

java - Storm 拓扑中的单例模式

java - 确认 JTextField 是否包含值 0.5-1?

java - 将java输出添加到bat文件的回显字符串

java - 执行hadoop代码时出现问题

c++ - 具有多个非默认构造函数基础的单例派生类

c++ - 单例使用 C++