相关疑难解决方法(0)

接口中静态和默认方法的区别

当我注意到你现在可以在界面中定义静态和默认方法时,我正在通过接口学习.

public interface interfacesample2 {
    public static void method() {
        System.out.println("hello world");
    }

    public default void menthod3() {
        System.out.println("default print");
    }
}
Run Code Online (Sandbox Code Playgroud)

请解释两者的区别,如果有一个例子,我们什么时候使用它会很好.在接口上有点困惑.

java java-8

94
推荐指数
6
解决办法
5万
查看次数

从默认接口方法记录

向所有Java大师致敬!

从Java8开始,我们可以在接口中使用默认实现(yay!).但是,如果要从默认方法进行日志记录,则会出现问题.

我有一种感觉,每次我想在默认方法中记录某些内容时调用.getLogger()是不明智的.

是的,可以在接口中定义静态变量 - 但这对接口来说不是一个好的做法+它暴露了记录器(必须是公共的).

我现在的解决方案:

interface WithTimeout<Action> {

    default void onTimeout(Action timedOutAction) {
        LogHolder.LOGGER.info("Action {} time out ignored.", timedOutAction);
    }

    static final class LogHolder {
        private static final Logger LOGGER = getLogger(WithTimeout.class);
    }
}
Run Code Online (Sandbox Code Playgroud)

LogHolder对所有人来说仍然是可见的,因为它没有提供任何方法,并且它应该是接口内部的.

你们有没有人知道更好的解决方案?:)

编辑:我使用Logback支持的SLF4J

java interface java-8

19
推荐指数
1
解决办法
7473
查看次数

标签 统计

java ×2

java-8 ×2

interface ×1