JAVA 8 '::' 关键字详解

 更新时间:2020年09月21日 10:58:22   作者:kegaofei  
这篇文章主要介绍了JAVA 8 '::' 关键字,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

Java 8 中我们可以通过 `::` 关键字来访问类的构造方法,对象方法,静态方法。

现有一个类 Something

class Something {
 
  // constructor methods
  Something() {}
 
  Something(String something) {
	System.out.println(something);
  }
 
  // static methods
  static String startsWith(String s) {
    return String.valueOf(s.charAt(0));
  }
  
  // object methods
  String endWith(String s) {
    return String.valueOf(s.charAt(s.length()-1));
  }
  
  void endWith() {}
}

如何用 '::' 来访问类Something中的方法呢?先定义一个接口,因为必须要用 functional interface 来接收,否则编译错误(The target type of this expression must be a functional interface)

@FunctionalInterface
interface IConvert<F, T> {
  T convert(F form);
}

(@FunctionalInterface 注解要求接口有且只有一个抽象方法,JDK中有许多类用到该注解,比如 Runnable,它只有一个 Run 方法。)

观察接口 IConvert,传参为类型 F,返回类型 T。所以,我们可以这样访问类Something的方法:

访问静态方法

// static methods
IConvert<String, String> convert = Something::startsWith;
String converted = convert.convert("123")

访问对象方法

// object methods
Something something = new Something();
IConvert<String, String> converter = something::endWith;
String converted = converter.convert("Java");

访问构造方法

// constructor methods
IConvert<String, Something> convert = Something::new;
Something something = convert.convert("constructors");

总结

我们可以把类Something中的方法static String startsWith(String s){...}、String endWith(String s){...}、Something(String something){...}看作是接口IConvert的实现,因为它们都符合接口定义的那个“模版”,有传参类型F以及返回值类型T。比如构造方法Something(String something),它传参为String类型,返回值类型为Something。注解@FunctionalInterface保证了接口有且仅有一个抽象方法,所以JDK能准确地匹配到相应方法。

到此这篇关于JAVA 8 '::' 关键字的文章就介绍到这了,更多相关JAVA 8 '::' 关键字内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java内省实例解析

    Java内省实例解析

    这篇文章主要介绍了Java内省实例解析,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • Java线程的6种状态及转化方式

    Java线程的6种状态及转化方式

    本文详细介绍了Java线程的六种状态以及状态之间的转换关系,线程状态包括NEW(新建)、RUNNABLE(运行)、BLOCKED(阻塞)、WAITING(等待)、TIMED_WAITING(超时等待)和TERMINATED(终止)
    2024-09-09
  • 解析SpringSecurity自定义登录验证成功与失败的结果处理问题

    解析SpringSecurity自定义登录验证成功与失败的结果处理问题

    这篇文章主要介绍了SpringSecurity系列之自定义登录验证成功与失败的结果处理问题,本文通过实例给大家讲解的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11
  • 解决idea2020 maven无法自动导包的问题

    解决idea2020 maven无法自动导包的问题

    这篇文章主要介绍了解决idea2020 maven无法自动导包的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • Java设计模式之java桥接模式详解

    Java设计模式之java桥接模式详解

    这篇文章主要介绍了Java设计模式之桥接模式,结合实例形式详细分析了桥接模式的概念、功能、Java实现方法及相关注意事项,需要的朋友可以参考下
    2021-09-09
  • java实现简单的验证码功能

    java实现简单的验证码功能

    这篇文章主要为大家详细介绍了java实现简单的验证码功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • java如何防止表单重复提交的注解@RepeatSubmit

    java如何防止表单重复提交的注解@RepeatSubmit

    @RepeatSubmit是一个自定义注解,用于防止表单重复提交,它通过AOP和拦截器模式实现,结合了线程安全和分布式环境的考虑,注解参数包括interval(间隔时间)和message(提示信息),使用时需要注意并发处理、用户体验、性能和安全性等方面,失效原因是多方面的
    2024-11-11
  • Springboot RestTemplate 简单使用解析

    Springboot RestTemplate 简单使用解析

    这篇文章主要介绍了Springboot RestTemplate 简单使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • SpringBoot接口加密解密统一处理

    SpringBoot接口加密解密统一处理

    这篇文章主要为大家详细介绍了SpringBoot接口加密解密统一处理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • java在原字符中插入新字符或字符串实例

    java在原字符中插入新字符或字符串实例

    这篇文章主要介绍了java在原字符中插入新字符或字符串实例,具有很好的价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08

最新评论