Java8新特性
interface ii1{
public default void de() {System.out.println("默认");}//这里的default关键字不是访问修饰符(隐式public),是接口的特有的关键字,用以表示已被实现的方法,继承类不可写此关键字。
static void st() {System.out.println("静态");}
void qq();void ww();
public static void main(String[] args) {
st();
}
}
public class Test1 {
public static void main(String[] args) {
new ii1(){//通过这种方式创建对象的话,接口里可以有多个抽象方法,但是通过lambda表达式或方法引用的方式就只能有一个抽象方法。
int ee=3;
public void ww() {}
public void qq() {de();ii1.st();}
};}}
lambda表达式。
表达式或者方法引用代表的是函数式接口类型的对象。
如果方法体只有一行语句,且该方法有返回值,如果方法体里的那一行语句本身就是一个值的形式,可以省略return。
Collections.sort(names, (String a, String b) -> b.compareTo(a));
lambda表达式可以有多条语句的,而方法引用则要求方法的实现只有一条语句,且方法引用不包含参数,只包含实现语句,如果该实现语句是一个静态方法调用,则为Integer::value;这种静态类名+方法名的形式,参数只能作为此方法的参数,这也是为什么只允许一条语句并且可以不写参数。引用类型对象也可以方法引用,但是稍微复杂。
lambda表达式也可以引用外部变量,但是不可以修改外部的局部变量的值,却可以修改静态和实例变量的值。也不能调用default修饰的方法。
函数式接口。
要求只有一个抽象方法,但可以有多个default方法。如
@FunctionInterface
public interface FI<T,E>{
T haha(E e);}