java 8新特性學習之三:Java 8 lambda表示式初步第三回

孫小光發表於2016-06-14

一、泛型函式式介面

lambda表示式自身不能指定型別引數。因此,lambda表示式不能是泛型。然而,與lambda表示式關聯的函式式介面可以是泛型。此時,lambda表示式的目標型別部分由宣告函式式介面引用時指定的引數型別決定。

interface SomeFunc<T>{
    T func(T t);
} 
class GenericFunctionalInterfaceDemo{
    public static void main(String args[]){
        SomeFunc<String> reverse = (str)->{
            String result = "";
            int i;
            for(i = str.length()-1;i>=0;i--){
                result += str.charAt(i);
            }
            return result;
        };
        System.out.println("lambda reversed is"+reverse.func("lambda"));
        System.out.println("Expression reversed is"+reverse.func("Expression"));
        SomeFunc<Integer> factorial= (n)->{
            int result = 1;
            for(int i=1;i<=n;i++){
                result = i*result;
            }
            return result;
        };
        System.out.println("The factoral of 3 is "+factorial.func(3));
        System.out.println("The factoral of 5 is "+factorial.func(5));
    }
}

輸出如下所示:

lambda reversed is adbmaL
Expression reversed is noisserpxE
The factoral of 3 is 6
The factoral of 5 is 120

在程式中,泛型函式式介面SomeFunc的宣告如下所示:

interface SomeFunc<T>{
    T func(T t); 
}  

其中,T指定了func()函式的返回型別和引數型別。這意味著它與任何接受一個引數,關返回一個相同型別的值的lambda表示式相容。

相關文章