学习笔记:因为java匿名类学习到接口的一些小用法
在看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有什么具体作用呢?这个有时间再研究研究吧。
注:此文章为原创,欢迎转载,请在文章页面明显位置给出此文链接!
若您觉得这篇文章还不错请点击下右下角的推荐,非常感谢!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人