Java8允许接口具有静态方法。如果有人解释我们可能需要使用静态方法进行接口,那将非常有用。
提前致谢。
答案 0 :(得分:3)
您是否搜索过jdk来源?至少有两个例子如何:
Function.identity()
具有以下实现:
static <T> Function<T, T> identity() {
return t -> t;
}
或Predicate.isEqual
看起来像:
static <T> Predicate<T> isEqual(Object targetRef) {
return (null == targetRef)
? Objects::isNull
: object -> targetRef.equals(object);
}
通常我将它们视为静态工厂方法,返回该接口的实例。
我在代码库中使用了一个很好的例子(but it comes from Holger initially):
public interface UncheckedCloseable extends Runnable, AutoCloseable {
@Override
default void run() {
try {
close();
} catch (Exception ex) {
throw new RuntimeException(ex);
}
}
static UncheckedCloseable wrap(AutoCloseable c) {
return c::close;
}
default UncheckedCloseable nest(AutoCloseable c) {
return () -> {
try (UncheckedCloseable c1 = this) {
c.close();
}
};
}
}
答案 1 :(得分:1)
答案 2 :(得分:0)
据我所知 -
1.这些方法不能被继承它的类覆盖。
2.只能访问该界面的功能(不得覆盖)。
因此,只要您希望接口的函数(非静态或覆盖)使用该函数(静态),就可以使用它们。
因此,您可以使用自己的业务逻辑,自己的排序方法,一些限制或边界。
所以它可以被用作好像有人调用你的函数,并在其他函数的帮助下你自己做的东西。就像其他程序员实现你的界面来使用一些为自己的程序提供一些支持的功能(例如,可以保存笔记,计划你的会议等的日历)。
但请记住,您不应该覆盖调用这些静态函数的函数。