匿名内部类 Inner class
2024-10-11 03:07:26
先说结论
匿名内部类分两种,一种是接口的匿名实现,一种是类的匿名子类!后者往往用于修改特定方法。
再说起因
本来以为匿名内部类很简单,就是接口的匿名实现,直到我发现了下面这段代码:
public class FooBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() {
try {
final PropertyEditor numberPE = new CustomNumberEditor(Integer.class, true);
PropertyDescriptor ageDescriptor = new PropertyDescriptor("age", Foo.class) {
public PropertyEditor createPropertyEditor(Object bean) {
return numberPE;
};
};
return new PropertyDescriptor[] { ageDescriptor };
}
catch (IntrospectionException ex) {
throw new Error(ex.toString());
}
}
}
注意第6行到第10行之间的代码。
开始以为PropertyDescriptor是一个接口,结果不是,这就是一个正常的类。懵比。。WTF!!!
好在几分钟内就转过来了,这个似乎可能好像也是内部类吧?
二话不说,先验证一番:
先来一个类:
package inherit; /**
* @author LarryZeal
*
*/
public class Editor { public void hello() {
System.out.println("hello from Editor");
}
}
再来个测试:
package inherit; import org.junit.Test; /**
* @author LarryZeal
*
*/
public class InheritFromEditorTest { /**
* 对接口来说是匿名实现,对类来说就是匿名子类了。
*/
@Test
public void run() {
Editor editor = new Editor() {
public void hello() {
System.out.println("what!!!");
}
}; editor.hello();
}
}
运行,结果输出"what!!!",验证通过,果然如此。
再说下用途
匿名子类往往用于重写特定的方法。
补充
根据某群内 随意丶nice 童鞋的提示,还有更进一步的用法:
@Test
public void run2() {
Map<String, String> map = new HashMap<String, String>() {
{
put("1", "1");
put("2", "2");
put("3", "3");
put("4", "4");
put("5", "5");
// ...
}
};
}
利用匿名子类的构造代码块执行某些特定操作,还不需要使用对象的引用!省时省力哦!
最新文章
- Webstorm 2016.3激活码
- JS 4 新特性:混合属性(mixins)之二
- OFFSET约束(OFFSET IN 和OFFSET OUT)
- 基于bshare分享平台,在一个页面上实现多个不同内容的web分享
- HDU 3353
- C# 支持多种语言
- 嵌入式 hi3518平台检测网线是否插上
- 【技术贴】webservice 调用 Transport error : 401 Error:Una
- PHP文件的上传下载
- Java并发编程--线程封闭(Ad-hoc封闭 栈封闭 ThreadLocal)
- rsync+inotify脚本
- 走进javascript——数组的那些事
- bzoj 4918: 回文数对
- #YCB#待做题目与填坑资料
- 数据挖掘_requests模块的get方法
- C# 字符串 输出格式 指定间隔 通用性很强
- 洛谷 P3320: bzoj 3991: LOJ 2182: [SDOI2015]寻宝游戏
- .NetCore下使用Prometheus实现系统监控和警报 (四)客户端代码处理
- 【Ubuntu】使用记录
- pre 标签的使用
热门文章
- 微信小程序 - 为何setData到页面上有的加分号
- linux系统中的DNS服务器介绍
- DBA 需要知道N种对数据库性能的监控SQL语句
- HBase in Action前三章笔记
- Java 同步器
- HBase权威指南 高清中文版 PDF(来自linuxidc)
- 大比速:remoting、WCF(http)、WCF(tcp)、WCF(RESTful)、asp.net core(RESTful) .net core 控制台程序使用依赖注入(Autofac)
- 【Unity】开发WebGL内存概念具体解释和遇到的问题
- Python 实int型和list相互转换 现把float型列表转换为int型列表 把列表中的数字由float转换为int型
- appium 1.6.3 + ios 10.2 + xcode 8.2.1 真机运行iphone app