Java8 中的 default
之前的版本里 interface 中的方法必须是抽象方法,不能有方法体。现在可以添加 interface 内方法,只需要在方法的前面加一个 default 关键字,表示属于接口内部默认存在的方法。
如果两个接口包括的默认方法同名,当一个 class 同时实现这两个接口,并调用他们共同的 default方法,则程序会报错。
注意:
default 方法一定程度上,解决了接口的实现的需要适配器的情景,比如 以前要使用 WebMvcConfigurer,因为其方法都是抽象的,我们需要使用一个适配器去做一个默认实现(比如 WebMvcConfigurerAdapter),而现在我们可以直接 implements 它,而不必使用适配器去解决方法抽象问题,因为其所有抽象方法都被 default 关键字取代了。
源码:
- public interface WebMvcConfigurer {
- default void configurePathMatch(PathMatchConfigurer configurer) {
- }
- default void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
- }
- default void configureAsyncSupport(AsyncSupportConfigurer configurer) {
- }
- default void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
- }
- default void addFormatters(FormatterRegistry registry) {
- }
- default void addInterceptors(InterceptorRegistry registry) {
- }
- default void addResourceHandlers(ResourceHandlerRegistry registry) {
- }
- default void addCorsMappings(CorsRegistry registry) {
- }
- default void addViewControllers(ViewControllerRegistry registry) {
- }
- default void configureViewResolvers(ViewResolverRegistry registry) {
- }
- default void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
- }
- default void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> handlers) {
- }
- default void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
- }
- default void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
- }
- default void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {
- }
- default void extendHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {
- }
- @Nullable
- default Validator getValidator() {
- return null;
- }
- @Nullable
- default MessageCodesResolver getMessageCodesResolver() {
- return null;
- }
- }
233
Java8 中的 default的更多相关文章
- java8中接口default、static新特性,与抽象类区别
之前Java接口中的方法默认都是public abstract,成员变量默认都是public static final,偶然发现接口中可以有default类型的方法,才知道java8中接口可以有自己的 ...
- Java8中的default方法
default方法 Java 8中引入了一个新的概念,叫做default方法,也可以称为Defender方法,或者虚拟扩展方法(Virtual extension methods). Default方 ...
- Java8中Lambda表达式的10个例子
Java8中Lambda表达式的10个例子 例1 用Lambda表达式实现Runnable接口 //Before Java 8: new Thread(new Runnable() { @Overri ...
- java8中的接口与时间操作
java8中接口可以有默认方法(用default修饰,可以有多个)和静态方法了. public interface Tran { default public String getName() { r ...
- Java8中的 lambda 和Stream API
前言 由于项目中用到了比较多有关于 Java8 中新的东西,一开始自己只是会写,但是写起来不太顺,然后就在网上找到了一个很好的关于Java8新特性的视频,所以就进行了学习了一下,以下是自己对 la ...
- 一文带你认识Java8中接口的默认方法
Java8是Oracle于2014年3月发布的一个重要版本,其API在现存的接口上引入了非常多的新方法. 例如,Java8的List接口新增了sort方法.在Java8之前,则每个实现了List接口的 ...
- Java7与Java8中的HashMap和ConcurrentHashMap知识点总结
JAVA7 Java7的ConcurrentHashMap里有多把锁,每一把锁用于其中一部分数据,那么当多线程访问容器里不同数据段的数据时,线程间就不会存在锁竞争,从而可以有效的提高并发访问效率呢.这 ...
- 关于java8中的String
String 对象的不可变性 java8中的String只有2个属性value和hash,相关代码如下: /** The value is used for character storage. */ ...
- 公子奇带你一步一步了解Java8中Lambda表达式
在上一篇<公子奇带你一步一步了解Java8中行为参数化>中,我们演示到最后将匿名实现简写为 (Police police) -> "浙江".equals(poli ...
随机推荐
- .net core日志记录
.net core日志记录 日志是必须的,目前采用log4net进行日志记录. 定义通用的日志记录方法 public static class Log4NetFunc { private static ...
- Pandas 使用笔记
创建空的数据框: import pandas as pd df = pd.DataFrame(columns = ["ebayno", "p_sku", &qu ...
- requirejs amd module load example
person.js /** * This example make use of requireJS to provide a clean and simple way to split JavaSc ...
- BI 系列随笔列表 (SSIS, SSRS, SSAS, MDX, SQL Server)
微软 BI ETL 架构设计 如何在 ETL 项目中统一管理上百个 SSIS 包的日志和包配置框架 如何管理和记录 SSIS 各个 Task 的开始执行时间和结束时间以及 Task 中添加|删除|修改 ...
- XCode各种问题
2018.07.10 1.clang: warning: libstdc++ is deprecated; move to libc++ [-Wdeprecated] 2.2018.07.29 海康 ...
- WWDC 17: 开发者的最初观感
WWDC 17: 开发者的最初观感 前言 每年的 WWDC 都是 iOS 开发者集体高潮的时刻.第一天的 WWDC 带来了全新的 iOS 11.MacOS.tvOS 和 watchOS,革命性的 AR ...
- 关于VMware Linux 虚拟机忘记root 密码找回
因为昨天新安装过虚拟机设置了新的密码,再加上我好长时间没有用自己旧的虚拟机,导致忘记了密码,原来虽然知道在单用模式下,找回密码,但是确实是自己从来都没有做过,还好我们组大手飞翔哥告诉了我,怎么找回ro ...
- [Java并发编程(五)] Java volatile 的实现原理
[Java并发编程(五)] Java volatile 的实现原理 简介 在多线程并发编程中 synchronized 和 volatile 都扮演着重要的角色,volatile 是轻量级的 sync ...
- PowerDesigner 15进行逆向工程生成数据库图表时,注释的comment的生成,解决PowerDesigner逆向工程没有列注释
使用PowerDesigner默认配置逆向工程是没有注释(name列为英文,comment列是空的),这样的不方便查看字段具体是什么意义,将注释一同导出,方便查看字段具体的意义,如下图 注释列导出步骤 ...
- python 多文件知识
对于一个大型的项目,会存在很多个py文件,本文记录与多文件有关的内容. 1. python 如何在一个.py文件中调用另一个.py文件的类 如果是在同一个 module中(也就是同一个py 文件里), ...