当我注意到你现在可以在界面中定义静态和默认方法时,我正在通过接口学习.
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大师致敬!
从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