簡體   English   中英

如何在Java中將參數傳遞給Singleton

[英]how to pass parameter to singleton in java

我需要使用Web應用程序中的預先輸入功能來顯示數據庫中的名稱。 我使用Dojo過濾選擇來顯示名稱。 這些名稱必須顯示在多個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;
}
public List<String> getName(String param){
    X obj=new X();
    return obj.getNames(param);
}

接着:

 ClassicSingleton.getInstance().getName(param)

為您工作?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM