使用预定义功能接口的方法参考

时间:2021-03-16 14:56:48

标签: java java-8 method-reference

我正在尝试一些与使用函数式接口的方法引用相关的事情。我想使用有界接收器和无界接收器将字符串转换为大写。 虽然我已经理解了print1和print2的方法,但我不确定print3是如何编译的。因为 ConsumerTrue,它接受​​一个参数并且什么都不返回,而 String 中的 void accept(T t); 类不接受任何参数但返回 字符串。我猜编译器只是检查实际参数是否是 lambda 表达式/MR,形式参数是否是函数接口。正确吗?

toUpperCase()

输出:

package com.learn.boundedtypes;

import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;
public class MRTest
{
   public static void main(String[] args)
   {
      String s = "The quick brown fox jumped over the lazy dog";
      print1(s::toUpperCase);
      print2(String::toUpperCase, s);
      print3(String::toUpperCase, s);
      
   }
   public static void print1(Supplier<String> supplier)
   {
      System.out.println(supplier.get());
   }
   
   public static void print2(Function<String, String> function, String s)
   {
      System.out.println(function.apply(s));
   }
   
   public static void print3(Consumer<String> consumer, String s)
   {
      consumer.accept(s);
      System.out.println(s);
   }
} 

0 个答案:

没有答案
相关问题