XhstormR


On a dark desert highway Cool wind in my hair


函数式编程:Kotlin 与 Java

Updated on 2017-02-13

Kotlin

fun main(args: Array<String>) {
    a({ s -> println(s) })     Lambda 
    
    a { s -> println(s) }     
    
    a { println(it) }     使 `it` 
    
    a(::println)     使
}

fun main(args: Array<String>) = a(::println)      1 

----

fun a(block: (String) -> Unit): Unit {     使
    block("ABC")
}

fun a(block: (String) -> Unit) {      Unit (void) 
    block("ABC")
}

fun a(block: (String) -> Unit) = block("ABC")      1 

-------------------------------------------------------
Finally
fun main(args: Array<String>) = a(::println)

fun a(block: (String) -> Unit) = block("ABC")

----

ABC

Java

public class Main {
    public static void main(String[] args) {
        a((String s) -> {     Lambda 表达式
            System.out.println(s);
        });
        等同于
        a((String s) -> System.out.println(s));     方法体只含有 1 条执行代码转为表达式省略方法体和返回值
        等同于
        a(s -> System.out.println(s));     省略参数类型
        等同于
        a(System.out::println);     使用方法引用
    }

    private static void a(A a) {高阶函数函数参数使用接口表达只支持传递对象不支持传递方法
        a.a("ABC");
    }
}

@FunctionalInterface
interface A {
    void a(String str);
}

-------------------------------------------------------
Finally
public class Main {
    public static void main(String[] args) {
        a(System.out::println);
    }

    private static void a(A a) {
        a.a("ABC");
    }
}

@FunctionalInterface
interface A {
    void a(String str);
}

----
输出
ABC

对比

Kotlin
fun main(args: Array<String>) = a(::println)

fun a(block: (String) -> Unit) = block("ABC")     
Java
public class Main {
    public static void main(String[] args) {
        a(System.out::println);
    }

    private static void a(A a) {     接口表达只支持传递对象不支持传递方法
        a.a("ABC");
    }
}

@FunctionalInterface
interface A {
    void a(String str);
}
TOP