如何重构准备可变长度参数并调用方法的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

我有一个.java文件,其中有许多方法,如下面的代码,我如何重构使其更干净

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());
}