学习笔记:因为java匿名类学习到接口的一些小用法
2015-08-27 16:50
411 查看
在看CometD的示例代码时发现了许多有意思的代码,但说实话看别人的代码确实是件很累的事情,所以就看到这个知识点做一下记录吧。
先看一段代码:
代码1
这段代码中有一个new的操作,而且是在方法参数中进行的,这给了我一个好奇的点。此时首先想到的是C#中的匿名类,于是网上找了找资料,确实是类似的语法特性。继续看代码就发现一个问题:
ConfigurableServerChannel是一个接口,而且Initializer是ConfigurableServerChannel中的一个内部嵌套接口。
代码2
这就有另一个问题,接口怎么就可以实例化呢?还是代码1中的代码,发现其实例化时是直接包含了一段实现,并且实现了configureChannel方法。这就说明直接实现了一个类来继承Initializer接口。这里匿名类就显身了。
也就是说代码看起来是在实例化一个接口,实际上是通过匿名类的机制实现了一个类,并且动态创建这个匿名类的实例。
这样写的好处是很明显的,使用接口来约定,在具体使用时再实际使用业务代码。这样做代码也精简了许多,不需要创建一堆的java代码单元。但如果类需要具名且重复使用的话那么就不太适合使用这种做法,否则会产生许多重复的代码。
在看代码的时候学到另一个知识,就是原来接口里也可以有实现,看代码2中的Persistent静态类是直接继承实现了Initializer接口。这种写法第一次见,想了半天也没太明白怎么回事。于是写个例子自己跑跑看:
代码3
上面的代码运行的结果如下:
I am object instance: A
I am StaticClass: B
我了个去,好吧,有点不淡定了。原来静态类也可以实例化!!!!!!为了确认此问题我把StaticClass的的static给去掉,运行的结果是一样的,那么我就不知道这个static有什么具体作用呢?这个有时间再研究研究吧。
先看一段代码:
代码1
这段代码中有一个new的操作,而且是在方法参数中进行的,这给了我一个好奇的点。此时首先想到的是C#中的匿名类,于是网上找了找资料,确实是类似的语法特性。继续看代码就发现一个问题:
ConfigurableServerChannel是一个接口,而且Initializer是ConfigurableServerChannel中的一个内部嵌套接口。
代码2
这就有另一个问题,接口怎么就可以实例化呢?还是代码1中的代码,发现其实例化时是直接包含了一段实现,并且实现了configureChannel方法。这就说明直接实现了一个类来继承Initializer接口。这里匿名类就显身了。
也就是说代码看起来是在实例化一个接口,实际上是通过匿名类的机制实现了一个类,并且动态创建这个匿名类的实例。
这样写的好处是很明显的,使用接口来约定,在具体使用时再实际使用业务代码。这样做代码也精简了许多,不需要创建一堆的java代码单元。但如果类需要具名且重复使用的话那么就不太适合使用这种做法,否则会产生许多重复的代码。
在看代码的时候学到另一个知识,就是原来接口里也可以有实现,看代码2中的Persistent静态类是直接继承实现了Initializer接口。这种写法第一次见,想了半天也没太明白怎么回事。于是写个例子自己跑跑看:
代码3
上面的代码运行的结果如下:
I am object instance: A
I am StaticClass: B
我了个去,好吧,有点不淡定了。原来静态类也可以实例化!!!!!!为了确认此问题我把StaticClass的的static给去掉,运行的结果是一样的,那么我就不知道这个static有什么具体作用呢?这个有时间再研究研究吧。
相关文章推荐
- Eclipse中高亮显示相同的变量
- 必须知道的八大种排序算法【java实现】(一) 冒泡排序、快速排序
- mina高并发短连接报java.io.IOException: Too many open files
- java集合框架系列-TreeMap介绍
- Java项目导入外部的JAR包
- java 基础之枚举
- Java加密与解密的艺术-对称加密算法
- SpringBoot事务注解实现原理
- Java IO流详解
- Spring学习(六)spring整合注解形式的hibernate
- SpringBoot自定义参数注解
- Spring事务配置的五种方式
- java程序模拟QQ空间登录 - 并模拟刷说说的赞
- leetcode--LinkedListCycleII
- Spring和MyBatis环境整合
- ANT构建JAVA WEB工程
- [分布式java]基于JavaAPI实现消息方式的系统间通信:UDP/IP+BIO
- Spring4 多种定时器详解
- 【java】国际化
- 自定义Spring动态代理类型