www.zhblog.net

Java 8 功能接口

Java 8 中功能接口只允许一个抽象方法存在,但可以添加任意多个默认方法。


1. 什么是功能接口

功能接口是新添加到java 8中的,它明确限定了接口中只能有一个抽象方法。这样的接口也被称为单抽象方法接口

在Java8中功能接口可以使用lambda表达式、方法引用、构造函数引用表示。

Java8引进了注解:@FunctionalInterface,它是为了告诉编译器,当标注为功能接口的接口违反了单一方法的约定时,抛出编译异常。

@FunctionalInterface

public interface FunctionalInterfacesTutorial {

    public void doWork();

    public void moreWorks();

}


上面代码会有一个编译异常:

Multiple non-overriding abstract methods found in interface FunctionalInterfacesTutorial


966F5FA1-F8C9-4c89-906A-FC34EB938BB3.png


2. 功能接口中可以做和不可以做的事

功能接口中只允许单个抽象方法,多个会引发编译异常。如果去掉注解@FunctionalInterface,将允许多个抽象方法,但这时它普通接口,不是功能接口;

一个功能接口即使不使用注解@FunctionalInterface也是可以的,注解只是为了告诉编译器强制执行单一抽象方法;

功能接口中你可以添加任意default方法;

@FunctionalInterface

public interface FunctionalInterfacesTutorial {

    public void doWork();

//  public void moreWorks(); // error



    default void doWork1() {

    }



    default void doWork2() {

    }

}


如果一个接口中的抽象方法是重写java.lang.Object的方法,那么这个方法不会计算到抽象方法中。如:Comparator虽然有两个抽象方法,但它仍是功能接口,因为它其中一个抽象方法是重写了Objectequals方法;

@FunctionalInterface

public interface FunctionalInterfacesTutorial {

    public void doWork();

    

    public String toString();

    public boolean equals(Object o);

}


 

展开阅读全文

评论

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 心情