代码之家  ›  专栏  ›  技术社区  ›  Rakesh

Java8中的静态方法

  •  -2
  • Rakesh  · 技术社区  · 7 年前

    提前谢谢。

    3 回复  |  直到 7 年前
        1
  •  3
  •   Eugene    7 年前

    你搜索过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();
                }
            };
        }
     } 
    
        2
  •  1
  •   Beri    7 年前

    here here :

    1. Java接口静态方法是接口的一部分,我们不能将其用于实现类对象。
    2. 实用方法 ,例如空检查、集合排序等。
    3. Java接口静态方法通过以下方式帮助我们提供安全性:
    4. 我们不能为对象类方法定义接口静态方法,因为这种静态方法无法对对象隐藏实例方法,所以我们将得到编译器错误。这是因为它在java中是不允许的,因为
    5. 对象是所有类的基类,我们不能有一个类级静态方法和另一个具有相同签名的实例方法。
    6. 我们可以使用java接口静态方法来删除实用程序类,例如集合,并将其所有静态方法移动到相应的接口,这将很容易找到和使用。
        3
  •  0
  •   sOOsOOry    7 年前

    据我所知-

    这些方法不能被继承它的类重写。

    因此,只要您希望接口的函数(不是静态的,也不是被重写的)使用该函数(是静态的),就可以使用它们。

    因此,您可以在其中使用自己的业务逻辑、自己的排序方法、一些限制或界限。

    但是请记住,您不应该重写调用这些静态函数的函数。