匿名内部类 Inner class
先说结论
匿名内部类分两种,一种是接口的匿名实现,一种是类的匿名子类!后者往往用于修改特定方法。
再说起因
本来以为匿名内部类很简单,就是接口的匿名实现,直到我发现了下面这段代码:
- 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");
- // ...
- }
- };
- }
利用匿名子类的构造代码块执行某些特定操作,还不需要使用对象的引用!省时省力哦!
匿名内部类 Inner class的更多相关文章
- java中的匿名内部类总结
原文地址: http://www.cnblogs.com/nerxious/archive/2013/01/25/2876489.html 匿名内部类也就是没有名字的内部类 正因为没有名字,所以匿名内 ...
- JAVA匿名内部类
首先定义一个抽象类Computer public abstract class Computer { //抽象类是不可以常见对象的 int a=1; public abstract void onli ...
- Java中 实现多线程成的三种方式(继承,实现,匿名内部类)
---------------------------------------------------------------------------------------------------- ...
- 匿名内部类与equals之学习要扎实
匿名内部类是胡哥给我上的第一节课,他一直在不断强调着“逻辑与思维”的重要性, 遇到问题不能用“不知道和没学过”去逃避它,所有的不知道和没教过都源自于没见过,一定要学会去看源代码,不要人云亦云..... ...
- jdk8 Lambda表达式与匿名内部类比较
Labmda表达式与匿名内部类 前言 Java Labmda表达式的一个重要用法是简化某些匿名内部类(Anonymous Classes)的写法.实际上Lambda表达式并不仅仅是匿名内部类的语法糖, ...
- 为什么匿名内部类只能访问final变量【转】
是变量的作用域的问题,因为匿名内部类是出现在一个方法的内部的,如果它要访问这个方法的参数或者方法中定义的变量,则这些参数和变量必须被修饰为final.因为虽然匿名内部类在方法的内部,但实际编译的时候, ...
- java提高篇(十)-----详解匿名内部类
在java提高篇-----详解内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意的事项.如何初始 ...
- Java中的内部类(成员内部类、静态内部类、局部内部类、匿名内部类)
Java中的内部类(成员内部类.静态内部类.局部内部类.匿名内部类) 神话丿小王子的博客主页 我们先看这样一段话:人是由大脑.肢体.器官等身体结果组成.而组成我们人体的心脏它也有自己的属性和行为(血液 ...
- java 22 - 22 多线程之 匿名内部类的方式实现多线程
首先回顾下之前的匿名内部类: 匿名内部类的格式: new 接口或者接口名(){ 重写方法 }; 本质:是该类或者接口的子类对象 匿名内部类方式使用多线程 1.new Thread(){代码-}.sta ...
- 匿名内部类为什么访问外部类局部变量必须是final的?
1.内部类里面使用外部类的局部变量时,其实就是内部类的对象在使用它,内部类对象生命周期中都可能调用它,而内部类试图访问外部方法中的局部变量时,外部方法的局部变量很可能已经不存在了,那么就得延续其生命, ...
随机推荐
- websocket 协议 使用
1.websocket简介 websocket最主要特点是:服务器可以主动给浏览器发送消息,而不是被动接收浏览器请求. websock协议可以参考:http://www.ruanyifeng.com/ ...
- JSON格式校验
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...
- Java之JVM调优案例分析与实战(4) - 外部命令导致系统缓慢
环境:这是一个来自网络的案例:一个数字校园应用系统,运行在一台4个CPU的Solaris 10操作系统上,中间件为ClassFish服务器.系统在进行大并发压力测试的时候,发现请求响应时间比较慢,通过 ...
- js经常使用功能代码
js经常使用功能代码(持续更新): 1---折叠与展开 <input id="btnDisplay" type="button" class=" ...
- 查看 apache、nginx、php、mysql 的编译参数
查看nginx编译参数:/usr/local/nginx/sbin/nginx -V 查看apache编译参数:cat /usr/local/apache2/build/config.nice 查看m ...
- 利用DM工具Weka进行数据挖掘(分类)的完整过程
利用DM工具Weka进行数据挖掘(分类)的完整过程:
- EMQ 学习---MQTT消息QoS
MQTT发布消息QoS保证不是端到端的,是客户端与服务器之间的.订阅者收到MQTT消息的QoS级别,最终取决于发布消息的QoS和主题订阅的QoS. 客户端连接: 客户端完成TCP三次握手之后,还需要发 ...
- ASP.NET给DataGrid,Repeater等添加全选批量删除等功能
很多情况下,在管理或者查看列表的时候我们需要很需要“全选”这个功能,这在ASP.NET中是非常容易实现的,下面我就将演示一点小代码实现这一功能. 实现全选的还是js的一个小函数: [code] ...
- 支付宝钱包手势密码破解实战(root过的手机可直接绕过手势密码)
/* 本文章由 莫灰灰 编写,转载请注明出处. 作者:莫灰灰 邮箱: minzhenfei@163.com */ 背景 随着移动互联网的普及以及手机屏幕越做越大等特点,在移动设备上购物.消费已是 ...
- CentOS 之 Supervisor
CentOS 之 Supervisor supervisor是一个Linux上用来管理程序后台运行的工具,支持程序的自启动,挂掉重启,日志等功能.可配置程序随系统启动,并支持挂掉重启,增强程序稳定性. ...