天天看點

Java新特性(枚舉、注解(Annotation)、接口定義加強、Lambda表達式、方法引用、内建函數式接口)-總結八

Java新特性

Java新特性(枚舉、注解(Annotation)、接口定義加強、Lambda表達式、方法引用、内建函數式接口)-總結八

備注:

範例:

1.枚舉實作多例設計模式   範例1:

enum Color {
    RED,GREEN,BLUE
}
public class TestDemo {
    public static void main(String[] args) {
        System.out.println(Color.BLUE);
    }
}
           

2.values()可以取得所有的枚舉資料,傳回的是一個枚舉的對象數組   範例2:

enum Color {
    RED,GREEN,BLUE
}
public class TestDemo {
    public static void main(String[] args) {
        for (Color temp : Color.values()) {
            System.out.println(temp.ordinal()+" = " +temp.name());
            //0 = RED
            //1 = GREEN
            //2 = BLUE
        }
    }
}
           

3.枚舉中可以定義屬性、方法、實作接口   範例3:

interface IColor {
    public String getColor() ;
}
enum Color implements IColor{
    RED("紅色"),GREEN("綠色"),BLUE("藍色") ; // 如果定義有很多内容,枚舉對象必須寫在第一行
    private String title ;
    private Color(String title) { // 構造方法私有化
        this.title = title ;
    }
    @Override
    public String toString() {
        return this.title ;
    }
    @Override
    public String getColor() {
        return this.title ;
    }
}
public class TestDemo {
    public static void main(String[] args) {
        IColor iColor = Color.BLUE ;
        System.out.println(iColor.getColor());
    }
}
           

4. 枚舉支援switch判斷   範例4:

enum Sex {
    MALE,FEMALE
}
public class TestDemo {
    public static void main(String[] args) {
        switch(Sex.MALE) {
            case MALE :
                System.out.println("男人");
                break ;
            case FEMALE :
                System.out.println("女人");
                break ;
        }
    }
}
           

5.Lambda表達式單行、多行語句   範例5:

@FunctionalInterface // 是一個函數式程式設計接口,隻允許有一個方法
interface IMessage {
    public void print() ; // 這是一個接口,接口中的抽象方法必須由子類覆寫。
}
public class TestDemo {
    public static void main(String[] args) {
    // 函數式程式設計的使用,目的還是輸出一句話
        IMessage message = () -> System.out.println("Hello World");
        /*
        //多行
        IMessage message = () -> {
            System.out.println("Hello ");
            System.out.println("World");
        };
        */
        message.print();
    }
}
           

6.Lambda表達式裡隻有一行進行資料的傳回,那麼直接使用語句即可,可以不使用return。  範例6:

interface IMath {
    public int add(int x,int y) ;
}
public class TestDemo {
    public static void main(String[] args) {
// 函數式程式設計的使用,目的還是輸出一句話
        IMath msg = (p1,p2) -> p1+p2 ; // 隻有一行傳回
        System.out.println(msg.add(10, 20));
    }
}
           

7.方法引用-引用靜态方法:類名稱::static 方法名稱 ;   範例7:

@FunctionalInterface // 是一個函數式程式設計接口,隻允許有一個方法
interface IUtil<P,R> {
    public R switchPara(P p) ;
}
public class TestDemo {
    public static void main(String[] args) {
        IUtil<Integer,String> iu = String :: valueOf ; //進行方法引用
        String str = iu.switchPara(1000) ; // 相當于調用了String.valueOf(1000)
        System.out.println(str.length());
    }
}
           

8.方法引用-引用對象方法:執行個體化對象 :: 普通方法 ; 範例8:

IUtil<String> iu = "hello" :: toUpperCase ; // 進行方法引用
           

9.方法引用- 引用某個特定類的方法: 類名稱 :: 普通方法 ; 範例9:

IUtil<Integer,String> iu = String :: compareTo ;
           

10.方法引用- 引用構造方法: 類名稱 :: new    範例10:

IUtil<Person,String,Integer> iu = Person :: new;
System.out.println(iu.createPerson("yuisama", 25)); // 相當于調用Person類的構造方法
           

11.内建函數式接口-功能型函數式接口: public interface Function<T, R> R apply(T t);    範例11:

//如果現在确定操作的資料是int,則可以使用IntFunction接口。
import java.util.function.IntFunction;
public class TestDemo {
    public static void main(String[] args) {
        IntFunction<String> fun = String :: valueOf ;
        System.out.println(fun.apply(1000));
    }
}
           

12.内建函數式接口-供給型函數式接口: public interface Supplier T get();   範例12:

import java.util.function.Supplier;
public class TestDemo {
    public static void main(String[] args) {
        Supplier<String> sup = "hello"::toUpperCase ;
        System.out.println(sup.get());
    }
}
           

13.内建函數式接口-消費型函數式接口:public interface Consumer void accept(T t);   範例13:

import java.util.function.Consumer;
public class TestDemo {
    public static void main(String[] args) {
        Consumer<String> cons = System.out :: println ;
        cons.accept("哈哈");
    }
}
           

14.内建函數式接口-斷言型接口:public interface Predicate boolean test(T t);     範例14:

import java.util.function.Predicate;
public class TestDemo {
    public static void main(String[] args) {
        Predicate<String> pre = "##123shdbs" :: startsWith ;
        System.out.println(pre.test("##"));
    }
}