• 第六章 接口,lamda表达式与内部类


    接口

    • 接口可以包含常量, 且不需要publish static final修饰, 接口的域会自动添加该修饰符. Java建议不要写多余的代码,因此省略修饰符更简洁.
    • 全部都是常量的接口背离了接口的初衷,不建议使用
    • Java SE8 中, 允许接口增加静态方法,但这也有悖接口的初衷
    • 接口的默认方法实现用 defalut 修饰, 适用于子类只需要实现其中几个方法的情况, 而其他方法以默认方法形势存在, 子类没必要实现他们.
    • 接口方法命名的二义性需要子类中解决,可以使用InterfaceName.super.Method()解决
    • 接口和类方法的二义性以类的方法优先, 这样可以保证与之前版本的兼容性
    • 不要让一个接口默认方法重新定义Object中的方法, 原因即上一点提到的, 类的方法优先导致默认方法失效.

    lamda表达式

    • 对于只有一个抽象方法的接口(没有default修饰)),需要这种接口的对象时,就可以提供一个 lambda 表达式。这种接口称为函数式接口(functional interface)。
    • @FunctionalInterface 注解表明接口是一个函数式接口,这个注解并非必须, java提倡使用, 这样可以避免对接口新增声明导致编译错误,另外也可以生成文档.
    • lamda表达式会转化为函数式接口, java的设计者没有为语言增加函数类型.
    • 方法引用,示例:Timer t = new Timer(1000 , event-> System.out.println(event)); 可以使用现有的方法,写成Timer t = new Timer(1000 , Systei.out::println)
    • java有个限制, 无法构造泛型类型的数组,可以使用数组的构造器引用克服这个限制,如Person 口 people = stream.toArray(Person[] :: new)
    • lamda表达式中只能引用值不变的外部变量,原因是并发执行时改变变量不安全

    内部类

    • 使用内部类的原因:(1)可以访问所在作用域的数据,包括私有数据;(2)对包内其他类隐藏;(3)匿名类比较便捷
    • 内部类中的static域必须时final的, 因为内部类可能有不同的实例, 如果不是final的就可能有多个不同的值;
    • 局部内部类是定义在方法中的内部类, 不能用public或private修饰符声明,他的作用域限制在它所在的块中
    • 静态方法无法使用getClass()因为没有this引用, new Object(){}.getClass().getEnclosingClass() 可以获取到外围类

    代理

  • 相关阅读:
    Oracle数据库物理结构
    Oracle 性能调优之:使用 V$SQL_PLAN 视图查询内存中的执行计划
    Oracle的操作系统身份认证(转)
    Oracle表空间知识
    Oracle数据库LOGGING&NOLOGGING模式概述
    使用插件bootstrap-table实现表格记录的查询、分页、排序等处理
    项目thymeleaf
    Comparable和Comparator的区别
    AJAX
    thymeleaf 基础
  • 原文地址:https://www.cnblogs.com/walkinhalo/p/9601803.html
Copyright © 2020-2023  润新知