在java中通常通过另一个单独的Builder对象来完成,而在kotlin中,可以在任意对象上使用apply,完全不需要任何来自定义该对象的库的支持 使用apply初始化一个TextView TextView省略了变量的命名,在alphabet中我们可以看到变量stringBuilder是可以省略的,TextView实例被创建后立即传给了apply,在传给apply的lambda中,TextView实例...
1:invokespecial#1 // Method java/lang/Object."":()V 4: aload_0 5: invokedynamic #2, 0 // InvokeDynamic #0:apply:()Ljava/util/function/Function; 10: putfield #3 // Field f:Ljava/util/function/Function; 13: return 请注意,方法引用的编译方式略有不同,因为 javac 不需要生成合成方法,而是...
java.util.function.Consumer<T>定义了一个名叫accept的抽象方法,它接受泛型T的对象,没有返回(void) 。 java.util.function.Function<T, R>接口定义了一个叫作apply的方法,它接受一个泛型T的对象,并返回一个泛型R的对象。 泛型的一个坑 1.Java类型要么是引用类型(比如Byte、Integer、Object、List) ,要么是原...
利用函数式接口包:java.util.function 常见的有 1.消费型接口 Consumer: void accept(T t):接收一个参数进行消费,但无需返回结果。 2.供给型接口 Supplier: T get():返回一个自定义数据 3. 函数型接口 Function<T,R>: R apply(T t):传入一个参数,返回想要的结果。 4. 断言型接口 Predicate: boolean ...
Java 8中有效的Lambda表达式 //具有一个String类型的参数 返回一个int Lambda没有return 语句,因为已经隐含了(String s) ->s.length()//Apple类型的参数 返回一个boolean(Apple a) -> a.getWeight() > 150//两个int参数 没有返回值(intx,inty) ->{ ...
importjava.util.function.Function;publicclassMain{publicstaticvoidmain(String[]args){Personperson=newPerson("Alice",25);Function<Person,String>concatenate=p->p.getName()+"-"+p.getAge();Stringresult=concatenate.apply(person);System.out.println(result);// 输出:Alice-25}} ...
在Java8中内置了大量的函数式接口供用户使用,下面为大家介绍几个常用的内置接口。 Function<T, R>:函数型接口,接收类型为T的参数,并对其操作,然后返回类型为R的结果。其中包含有apply(T t)方法。 举例:对一个字符串进行截取并返回结果 // 申明方法
1、apply函数使用的一般结构,返回值是对象本身 object.apply{ todo() } 2、apply函数的inline+lambda结构 3、apply函数的inline结构分析 从结构上来看apply函数和run函数很像,唯一不同点就是它们各自返回的值不一样,run函数是以闭包形式返回最后一行代码的值,而apply函数的返回的是传入对象的本身。
String x = "Hello "; // 如果下文有 lambda 使用了 x,这句等价于 final String x = "Hello " x = "test"; // 这句非法,无法通过编译 Function<String,String> func1 = y -> y+x; System.out.println(func1.apply("luan.ma")); lambda 底层实现 Lambda 表达式通过 invokedynamic 指令实现,书写...
Stream.of("java.lang.String", "ch.frankel.blog.Dummy", "java.util.ArrayList").map(it -> new ForNamer().apply(it)) // 1 .forEach(System.out::println);1.无法编译:需要捕获已检查的 ClassNotFoundException 我们必须添加一个 try/catch 块来解决编译问题。 Plain Text 复制代码 9 1 2...