zoukankan      html  css  js  c++  java
  • Java8新特性系列(Interface)

    一、静态成员
    在Java8以前,我们要定义一些常量,一般会写一个类,类中都是final static的一些变量,如下:

    public class Constants {
        public static final int MAX_SERVICE_TIME = 100;
    }
    
    public class Hello {
        public static void main(String[] args) {
            System.out.println(Constants.MAX_SERVICE_TIME);
        }
    }

    在Java8中Interface支持静态成员,成员默认是public final static的,可以在类外直接调用。

    public interface MyInterface {
        int MAX_SERVICE_TIME = 100;
    }
    
    public class Hello {
        public static void main(String[] args) {
            System.out.println(MyInterface.MAX_SERVICE_TIME);
        }
    }

    二、default函数
    在Java8以前,Interface中的函数是不能实现的,如下:

    public interface MyInterface {
        int MAX_SERVICE_TIME = 100;
        void test();
    }

    在Java8中,Interface中支持函数有实现,只要在函数前加上default关键字即可,如下:

    public interface MyInterface {
        int MAX_SERVICE_TIME = 100;
    
        void test();
        
        default void doSomething() {
            System.out.println("do something");
        }
    }

    default函数,实现类可以不实现这个方法,如果不想子类去实现的一些方法,可以写成default函数。在Java8之前,如果我们想实现这样的功能,也是有办法的,那就是先定义Interface,然后定义Abstract Class实现Interface,然后再定义Class继承Abstract Class,这样Class就不用实现Interface中的全部方法。
    三、static函数
    在Java8中允许Interface定义static方法,这允许API设计者在接口中定义像getInstance一样的静态工具方法,这样就能够使得API简洁而精练,如下:

    public interface MyInterface {
        default void doSomething() {
            System.out.println("do something");
        }
    }
    
    public class MyClass implements MyInterface {
    
    }
    
    public interface MyClassFactory {
        public static MyClass getInstance() {
            return new MyClass();
        }
    }

    四、@FunctionalInterface注解
    函数式接口其实本质上还是一个接口,但是它是一种特殊的接口:SAM类型的接口(Single Abstract Method)。定义了这种类型的接口,使得以其为参数的方法,可以在调用时,使用一个Lambda表达式作为参数。

    @FunctionalInterface
    public interface MyInterface {
        void test();
    }

    @FunctionalInterface注解能帮我们检测Interface是否是函数式接口,但是这个注解是非必须的,不加也不会报错。

    @FunctionalInterface
    public interface MyInterface {//报错
        void test();
    
        void doSomething();
    }

    Interface中的非default/static方法都是abstract的,所以上面的接口不是函数式接口,加上@FunctionalInterface的话,就会提示我们这不是一个函数式接口。
    函数式接口的作用?
    函数式接口,可以在调用时,使用一个lambda表达式作为参数。

    郭慕荣博客园
  • 相关阅读:
    Linux IO接口 监控 (iostat)
    linux 防火墙 命令
    _CommandPtr 添加参数 0xC0000005: Access violation writing location 0xcccccccc 错误
    Visual Studio自动关闭
    Linux vsftpd 安装 配置
    linux 挂载外部存储设备 (mount)
    myeclipse 9.0 激活 for win7 redhat mac 亲测
    英文操作系统 Myeclipse Console 乱码问题
    Linux 基本操作命令
    linux 查看系统相关 命令
  • 原文地址:https://www.cnblogs.com/jelly12345/p/15753949.html
Copyright © 2011-2022 走看看