新特性概述-枚举、注解、Lambda表达式、方法引用

32 篇文章 0 订阅

1.枚举(实际上就是多例)
java中枚举使用enum来定义,enum并不是一个新的结构,使用enum定义的枚举
实际上默认继承Enum枚举类。因此enum定义的枚举结构实际上就是一个多例类。

1.1Enum枚举类常用的三个方法:

  • ordinal():返回枚举对象下标,默认第一个对象编号为0;
  • name():返回枚举对象名称,默认与对象名称保持一致
  • values():返回所有枚举对象

范例:对于Enum枚举类方法的使用

enum Color2{
    RED,YELLOW,BLUE;
}
public class UseEnumTest {
    public static void main(String[] args) {
        System.out.println(Color2.BLUE);
        System.out.println(Color2.BLUE.ordinal()+"="+Color2.BLUE.name());
        for(Color2 colors2:Color2.values()){
            System.out.println(colors2);
        }
    }
}

1.2枚举中支持定义其他结构,如构造方法、普通属性、普通方法
1.3当枚举类中还包含其他结构,枚举对象的定义必须放在首行
1.4枚举可以实现接口,这样枚举中的每一个对象都变成了接口对象

范例:多例模式

package javaSE.bit.EnumClassTest;

/**
 * 多例模式
 * @author mayanni
 * @date 2019-04-28 17:50
 */
class Color{
    private String name;
    private static Color RED=new Color("red");
    private static Color BLUE=new Color("blue");
    private static Color YELLOW=new Color("yellow");
    private Color(String name){this.name=name;}
    public static Color getInstance(String colorName){
        switch (colorName){
            case "RED":
                return RED;
            case "BLUE":
                return BLUE;
            case "YELLOW":
                return YELLOW;
            default:
                return null;
        }
    }
    public String toString(){
        return this.name;
    }
}
public class Test {
    public static void main(String[] args) {
        Color red=Color.getInstance("RED");
        Color blue=Color.getInstance("BLUE");
        System.out.println(red);
        System.out.println(blue);

    }
}

2.注解
JDK内置的三大注解
2.1 @Override准确覆写:
编译期间检查当前覆写方法是否满足要求(方法名称是否正确、权限是否合理)
2.2 @Deprecated过期声明:
在早期版本的代码(方法),表示该方法在当前版本中已经不推荐使用,但是使用了也不报错。
只是起一个警告提示作用
2.3 @SuppressWarnings 压制警告
压制警告信息,压制警告信息不再提示

  1. JDK1.8接口

早期版本(jdk1.8之前)的接口已经有很多子类实现了,此时发现接口中的方法需要改动甚至新增方法,无法修改接口(全局常量+抽象方法)
将接口做了扩充:支持default定义的普通方法与静态方法
I.使用default定义的普通方法,通过子类对象调用,所有子类均有此方法,此时的default不能省略
II.使用static定义的静态方法,通过接口名称直接调用。

4.Lambda表达式(函数式编程)
使用Lambda表达式要求接口中有且只有一个抽象方法。
JDK1.8新增注解 @FunctionalInterface只能用于接口声明,检测当前接口是否只有一个抽象方法
4.1方法体实现只有一行
( )-> 具体实现代码;

4.2方法体有多行实现
( )-> {
方法体实现代码
}

4.3方法若有返回值:
a.只有一行代码,return可以省略

b.方法体有多行代码,此时return不能省略

5.方法引用:
一般结合Lambda表达式共同使用;引用的是方法的具体实现
5.1引用某个类的静态方法
String类中的valueOf()方法

ISubject<Integer,String > is=String :: valueOf;//进行方法引用
String str=is.switchPara(1000000);//等同于 String.valueOf()方法
System.out.println(str);

5.2引用某个对象的普通方法
String中的toUpperCase()方法为对象方法

ISubject<String> is = "hello"::toUpperCase;
System.out.println(is.switchPara());

5.3引用某个类的普通方法
String类中的compareTo()方法,此方法为普通方法

ISubject<Intgeter,String> is = String :: compareTo;
System.out.println(is.switchPara("马","杨"));

5.4引用某个类的构造方法

class Person {
   private String name ;
   private int age ;
   public Person(String name, int age) {
      super();
      this.name = name;
      this.age = age;
   }
   @Override
   public String toString() {
      return "Person [name=" + name + ", age=" + age + "]";
   }
}
@FunctionalInterface // 是一个函数式编程接口,只允许有一个方法
interface IUtil<R,PN,PA> {
   public R createPerson(PN p1,PA p2) ;
}
public class TestDemo {
   public static void main(String[] args) {
      IUtil<Person,String,Integer> iu = Person :: new;
      System.out.println(iu.createPerson("yuisama", 25)); // 相当于调用Person类的构造方法
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值