如何重构准备可变长度参数并调用方法的java代码?
我有一个.java文件,其中有许多方法,如下面的代码,我如何重构使其更干净如何重构准备可变长度参数并调用方法的java代码?,java,refactoring,Java,Refactoring,我有一个.java文件,其中有许多方法,如下面的代码,我如何重构使其更干净 public static void e(Throwable tr) { if (!debug) { return; } if (!allowE) return; if (tr == null) { return; } String content = wrapContent(tr.getMessage()); StackTraceE
public static void e(Throwable tr) {
if (!debug) {
return;
}
if (!allowE) return;
if (tr == null) {
return;
}
String content = wrapContent(tr.getMessage());
StackTraceElement caller = getCallerStackTraceElement();
String tag = generateTag(caller);
customLogger.e(tag, content, tr);
}
public static void i(String content) {
if (!debug) {
return;
}
if (!allowI) return;
content = wrapContent(content);
StackTraceElement caller = getCallerStackTraceElement();
String tag = generateTag(caller);
customLogger.i(tag, content);
}
=======更新======
这个类是android.util.Log的包装,供建议遵循命名约定的人使用:)。您可以将大部分代码剥离到一个共享方法中,然后从两个位置调用它
public static voidcombined(String content, Throwable tr, bool allow)
{
if (!debug) return;
if (!allow) return;
content = wrapContent(content);
StackTraceElement caller = getCallerStackTraceElement();
String tag = generateTag(caller);
if (tr != null) {
customLogger.e(tag, content, tr);
} else {
customLogger.i(tag, content);
}
}
public static void e(Throwable tr) {
if (tr == null) {
return;
}
combined(tr.getMessage(), tr, allowE);
}
public static void i(String content) {
combined(content, null, allowI);
}
出现两次,我们可以将其放入方法isAllow()
也出现了两次,customLogger.e和customLogger.i非常相似。让我们将其放入方法logInLevel
()
那么像这样,
public static void e(Throwable tr) {
if (!isAllow()||tr==null) return ;
logInLevel(ERROR,tr.getMessage())
}
public static void i(String content) {
if (!isAllow()) return ;
logInLevel(INFO,content);
}
private static boolean isAllow(){
return debug&&allowE;
}
private static logInLevel(int level, String content){
StackTraceElement caller = getCallerStackTraceElement();
String tag = generateTag(caller);
if(level==INFO){
customLogger.i(tag, content);
}
else{//ERROR , you may add more log level here
customLogger.e(tag, content);
}
}
其思想是应用关注点分离设计原则,以确保代码的不同部分能够解决特定的关注点
/**
* Logs error message
* @param tr a {@link Throwable} object containing the message to log
*/
public static void logErrorMessage(Throwable tr) {
if (tr == null) {
return;
}
logContent(tr.getMessage(), allowE, debug, LogLevel.ERROR);
}
/**
* Logs message
* @param content the message to log
* @param allow some variable
* @param debug check the debug status
* @param ll message log level
*/
public static void logContent(String content, boolean allow, boolean debug , LogLevel ll) {
if (!debug) || !allow) return;
switch(ll) {
case ERROR:
customLogger.e(getTag(content), content);
break;
case INFO:
customLogger.i(getTag(content), content);
break;
default:
}
}
/**
* Generates tag
* @param content the message to log
* @return a tagged string
*/
public static String getTag(String content) {
content = wrapContent(content);
return generateTag(getCallerStackTraceElement());
}
为方法指定多个字母的名称?您可以将方法名称更改为有意义的名称。您可以使用泛型…您可以使用
映射
,键入返回布尔值的对象类型,而不是allowE
和allowI
…尝试遵循所述java中的命名约定
public static void e(Throwable tr) {
if (!isAllow()||tr==null) return ;
logInLevel(ERROR,tr.getMessage())
}
public static void i(String content) {
if (!isAllow()) return ;
logInLevel(INFO,content);
}
private static boolean isAllow(){
return debug&&allowE;
}
private static logInLevel(int level, String content){
StackTraceElement caller = getCallerStackTraceElement();
String tag = generateTag(caller);
if(level==INFO){
customLogger.i(tag, content);
}
else{//ERROR , you may add more log level here
customLogger.e(tag, content);
}
}
/**
* Logs error message
* @param tr a {@link Throwable} object containing the message to log
*/
public static void logErrorMessage(Throwable tr) {
if (tr == null) {
return;
}
logContent(tr.getMessage(), allowE, debug, LogLevel.ERROR);
}
/**
* Logs message
* @param content the message to log
* @param allow some variable
* @param debug check the debug status
* @param ll message log level
*/
public static void logContent(String content, boolean allow, boolean debug , LogLevel ll) {
if (!debug) || !allow) return;
switch(ll) {
case ERROR:
customLogger.e(getTag(content), content);
break;
case INFO:
customLogger.i(getTag(content), content);
break;
default:
}
}
/**
* Generates tag
* @param content the message to log
* @return a tagged string
*/
public static String getTag(String content) {
content = wrapContent(content);
return generateTag(getCallerStackTraceElement());
}