【发布时间】:2017-06-17 05:26:19
【问题描述】:
我正在开发 REST API 服务,每次发生异常时,我都需要在日志中显示发生此异常的参数、方法和类名。所以我有带方法的单例类
public void log(final String className,String methodName,final Map<String,String> params,final String cause) {
final StringBuilder result=new StringBuilder();
for (Map.Entry<String, String> entry : params.entrySet()) {
result.append(entry.getKey()+" "+entry.getValue()+" ");
}
log.info("\n\t\t\tClass: "+className+"\n\t\t\t Method: "+methodName+"\n\t\t\t Params: "+result.toString()+" \n\t\t\t "+"Reason: "+cause);
}
使用示例
public String checkSession(String sid) {
final Map<String, String> params = new HashMap<String, String>();
params.put("sid", sid);
if (sid.isEmpty()) {
logger.log(this.getClass().getSimpleName(), "checkSession", params, " not valid session");
return Enums.Error.WRONG_SESSION.toString();
}
}
但是,在每种方法中,我都需要使用所有参数来初始化此地图。如何编写为所有方法返回 Map 的方法?
例如我有两种方法
public String createPass(String name,String surname) {
final Map<String, String> params = new HashMap<String, String>();
params.put("name", name);
params.put("surname", surname);
}
public String checkSession(String sid) {
final Map<String, String> params = new HashMap<String, String>();
params.put("sid", sid);
}
我需要的方法类似于
public HashMap<String,String> method(String args...){
final Map<String, String> params = new HashMap<String, String>
for(...)
map.put("parameter","parameterName");
}
【问题讨论】:
-
不完全清楚你想做什么,但如果你想实例化一次
params映射,为什么不让它成为一个成员变量呢?还是在一个方法中实例化它,比如checkParams()并将其传递给其他方法(checkSession、createPass)? -
感谢您的回复,我的意思是我有 30 多个方法,并且对于每个方法,我都会得到不同的参数,在每个方法中我初始化 Map,是否有任何方法可以渲染函数来提供所有这些参数作为这个元素的 agruments 和返回映射?
-
如果你不介意使用guava,你可以试试ImmutableMap.of。它允许您像
ImmutableMap.of("param1", "value1", "param2", "value2");这样在一行中创建地图。
标签: java methods parameters