将Object引用传递给Util类

时间:2013-02-18 14:31:21

标签: java

我正在开发基于Java EE的基于Web的应用程序。

我的问题:我正在创建BaseAPI的实例并将其传递给名为BaseUtil的实用程序类,如下所示:

package com ;

public class Test {
    public static void main(String args[]) {
        BaseAPI bApi = new BaseAPI();
        BaseUtil.getData(bApi);

    }

}



public class BaseUtil {

public static String getData(BaseAPI bapi) {

        bapi.addAccountIdParameter("SIM1");
        bapi.getData();
        return null;
    }
}




package com;

import java.util.HashMap;

public class BaseAPI {
    HashMap<String, Object> params = new HashMap<String, Object>();
    public void addAccountIdParameter(String value) {
        addParameter("ID", value);
    }
    public void addParameter(String name, String value) {
        if ((name != null) && (value != null)) {
            params.put(name.trim().toLowerCase(), value.trim());
        }
    }

    public String getData()
    {
        return "";
    }

}

这很好用。如果这是一种有效的方法,请告诉我,否则会对任何地方产生负面影响?

2 个答案:

答案 0 :(得分:2)

这是一种非常有效的方法,一般来说不会产生负面影响。但是,要了解它是否是API的最佳选择,需要更多信息。一个建议:

将BaseUtil类的构造函数设为private:

public class BaseUtil {
    private BaseUtil(){}
    ...
}

如果它只是一个静态实用程序类,这将阻止您的其他类创建此类的对象。此外,如果您开始向此BaseUtil类添加字段,那么如果您的应用程序是多线程的,则需要开始考虑线程安全性。

答案 1 :(得分:1)

从运行时的角度来看,这种方法看起来很好,如果您提到这些方法,它不应该导致任何性能或内存问题。

从更一般的设计角度来看,它看起来很尴尬,我建议不要这样做。您的BaseAPI类(以及已提示的名称)看起来像一个公共API,但在您的情况下,BaseAPI实例也以参数的形式存储状态。 BaseAPI类看起来更像是DAO,您可以在无状态的事情中轻松实现:

public class BaseAPI {
    public String getData(Map<String, Object> params)
    {
        // Do your parameter mapping here, then fetch the data
        return "";
    }
}

或者,提供ID参数作为方法参数。

使用某些依赖注入机制(如 Spring )捆绑它,您的设计将更加清晰。