`

[#0x0014] 匿名内部类:简化形式及自动向上转型

    博客分类:
  • Java
 
阅读更多

  内部类的一个重要作用是隐藏继承或是对接口的实现,典型的形式是:内部类来继承或是实现接口,由外部类提供代理constructor方法。这些代理constructor方法一般都利用的向上转型,即不返回内部类对象,而是返回内部类继承的父类对象或是实现的接口对象。如:

interface Intf {...}

class Outer
{
	class Inner implements Intf {...}

	public Intf createInner
	{
		return new Inner();
	}
}

而匿名内部类实际是对上述代码的简化,如:

interface Intf {...}

class Outer
{
	public Intf createInner
	{
		return new Intf() {...};
	}
}

这里,两处{...}的内容是一样的。

  这里的匿名内部类表示:我要创建一个implements Intf的class,这个class的定义是{...}。由于这个class没有名字,我们用的是new Intf(),可以看作是自动的向上转型。

  如果匿名内部类的创建要传参,那么可以直接写在new Intf()的括号里。

  如果匿名内部类里要直接使用某个变量或是参数,那么这个变量或是参数必须是final(new Intf()的括号里也需要说明)(Todo:另作一篇详述)。

(4月7日补充:匿名内部类的另一种用法)

interface Intf 
{
	int sum();
}

public class Outer
{
	public static int getSum()
	{
		return new Intf() 
		{
			public int sum()
			{
				return 1;
			}
		}.sum();
	}
	
	public static void main(String[] args)
	{
		System.out.println(getSum());
	}
}

  因为对匿名内部类的使用是直接new一个匿名内部类对象,所以也可以直接使用这个对象的方法或是域。

 

(7月27日补充:总结——匿名内部类{}内可写的代码)

interface Intf {...}

class Outer
{
	public Intf createInner
	{
		return new Intf() 
		{
			// Anonymous inner class CANNOT have a named constructor
			// only an instance initializer here
			{
				......
			}

			// function allowed here
			return-type xxx(arg list)
			{
				......
			} 
		};
	}
}

  匿名内部类没有构造器,只能有一个initializer (当然,你不用也可以);另外,可以在匿名内部类中写方法。

分享到:
评论

相关推荐

    蓝屏错误对照表

    - **解决方案**:确认文件路径及名称是否正确,检查文件是否存在并处于可访问的状态。 #### 0x00000003:系统找不到指定的路径。 - **描述**:当系统无法找到指定的文件夹或路径时出现此错误。 - **解决方案**:...

    上传后缀绕过

    ##### 0x01: 前台过滤绕过 通过抓包工具如Burp Suite截取上传请求,将文件名中的`.jpg`修改为`.php`(例如:将`evil.jpg`改为`evil.php`),这样可以绕过前端的文件扩展名检查。由于前端验证通常较为简单,这种方法...

    蓝屏代码解析。欢迎下载。

    这些代码通常出现在Windows操作系统遇到严重错误无法恢复时,系统会显示一个蓝色屏幕并列出错误代码及相关信息,以便用户或技术支持人员进行问题诊断。 ### 蓝屏代码(Blue Screen Error Codes) 在提供的内容中,...

    Windows蓝屏画面错误代码说明一览表

    以上错误代码仅列举了部分常见的蓝屏错误代码及其含义、原因及解决方法。针对不同的错误代码,具体的解决方案可能会有所不同,建议根据实际情况采取相应的措施。如果问题仍然无法解决,可以考虑寻求专业的技术支持。

    计算机蓝屏代码详解,很全的资料

    在日常使用计算机的过程中,有时会遇到系统突然崩溃的情况,屏幕变成蓝色并显示错误代码及简短的信息,这就是所谓的“蓝屏”现象。蓝屏通常是由硬件故障、驱动程序问题或操作系统错误引起的。本文将详细介绍几个常见...

    电脑蓝屏,0x电脑报错查询

    ### 电脑蓝屏,0x电脑报错查询 在日常使用Windows操作系统的过程中,遇到蓝屏问题几乎是不可避免的。这类问题通常会伴随着一串错误代码,这些代码被称作“停止错误”或“蓝屏错误”。了解这些错误代码背后的含义...

    笔记本蓝屏代码.txt

    本文将深入探讨笔记本蓝屏代码的含义、可能的原因以及解决方法,特别关注了几个常见的蓝屏错误代码,包括0x0000000A、0x0000007B、0x000000ED、0x0000007E/0x0000008E、0x00000050和0x000000D1。 #### 0x0000000A:...

    Windows 错误码整理

    ### 0x0014 - 设备类型不存在。 当尝试访问一个不存在的设备类型时,会触发此错误。 ### 0x0015 - 设备目前正忙。 如果设备正在处理另一个请求,而新的请求试图访问它,则会返回此错误。 ### 0x0016 - 请求的操作...

    Windows xp 蓝屏代码详解

    #### 0x0014 - 系统无法卸载驱动程序 - **描述**:系统无法卸载驱动程序。 - **可能原因**:驱动程序正在被使用。 #### 0x0015 - 设备未准备好 - **描述**:设备尚未准备好进行操作。 - **可能原因**:硬件初始化...

    电脑蓝屏代码一览表 有助于 你更好的了解你的电脑为什们蓝屏啊!

    ### 0x045b - 系统内部错误 系统核心内部出现问题。 ### 0x045c - 无法清理系统缓冲 系统缓冲区出现问题,无法清理。 ### 0x046a - 用户模式下,无法指针 与前面的用户模式指针错误类似。 ### 0x047e - 需要...

    常见蓝屏代码,代码蓝屏

    #### 0x00000000 - 未知错误 此错误代码通常表示未知或未定义的系统错误。 #### 0x00000001 - 初始化失败 当系统初始化过程中出现无法处理的问题时会触发此错误代码。 #### 0x00000002 - 系统无法启动 此错误表明...

    windows蓝屏代码

    #### 0x00000000 作业完成 此代码表示系统执行的操作已完成。通常这不是一个错误代码,而是一个正常结束的标志。 #### 0x00000001 不正确的函数 当调用的函数不适用于当前环境时,会出现此错误。这可能是由于应用...

    LAVFilters-0.74.exe

    Qt播放音视频文件报错DirectShowPlayerService::doRender: Unresolved error code 0x80040266或DirectShowPlayerService::doSetUrlSource: Unresolved error code 0x80004005 (),Qt 中的多媒体播放,底层是使用...

    C++0x_新特性

    ### C++0x 新特性详解 #### 引言 随着技术的发展和编程需求的变化,C++ 语言也在不断地演进之中。2009 年,C++ 的新标准 C++0x(后正式命名为 C++11)发布,带来了众多重要的改进和新功能。本文旨在详细介绍 C++0x...

    键盘扫描码

    在给定的部分内容中,我们可以看到扫描码通常以十六进制形式表示,并且与具体的键相对应。例如,“0x011bESC”表示“ESC”键对应的扫描码为0x011b。这种表示方法使得开发者能够轻松地查找到各个键的扫描码。 #### ...

    电脑蓝屏代码大全

    电脑蓝屏是指计算机在运行过程中遇到严重错误时自动显示的一种故障屏幕,通常会显示错误代码、原因等信息,帮助技术人员定位问题所在。本文将对给定文件中的蓝屏错误代码进行详细解读,并提供可能的解决方法。 ####...

    蓝屏代码详细解释(对于电脑爱好者非常珍贵)

    - **0x0014**: 系统无法安装驱动程序。 - **0x0015**: 驱动程序安装失败。 - **0x0016**: 系统无法识别驱动程序。 - **0x0017**: 循环冗余校验(CRC)错误。 - **0x0018**: 设备驱动程序错误。 - **0x0019**: 设备状态...

    蓝屏错误信息

    - **0x0014**: 系统无法安装设备驱动。 - **0x0015**: 设备未连接。 - **0x0016**: 无法识别设备。 - **0x0017**: 循环冗余校验错误(CRC),通常发生在磁盘读写时。 - **0x0018**: 试图访问的设备不存在。 - **0x...

Global site tag (gtag.js) - Google Analytics