java 中使用匿名类直接new接口详解及实例代码
作者:杨俊明 发布时间:2021-08-13 22:26:12
标签:java,匿名类,new接口
java:使用匿名类直接new接口
java中的匿名类有一个倍儿神奇的用法,见下面代码示例:
package contract;
public interface ISay {
void sayHello();
}
上面是一个简单的接口,下面是如何使用:
package jimmy;
import contract.ISay;
public class Program {
public static void main(String[] args) {
ISay say = new ISay() {
public void sayHello() {
System.out.println("Hello java!");
}
};
}
}
初看上去,就好象在“不提供接口实现的情况下,直接new了一个接口实例”,对于C#er来说,有一种尽毁三观的赶脚。
还好这只是假象,观察bin目录下的class输出,会发现有一个类似Program1.class的文件,如果反编译观察一下,发现原来是编译器自动生成一个类Program1.class的文件,如果反编译观察一下,发现原来是编译器自动生成一个类Program1:
package jimmy;
import contract.ISay;
import java.io.PrintStream;
class Program$1
implements ISay
{
public void sayHello()
{
System.out.println("Hello java!");
}
}
如果有些场合,只需要临时需要创建一个接口的实现类,上面的"技巧"可以用来简化代码.
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
来源:http://www.cnblogs.com/yjmyzz/p/3448330.html
0
投稿
猜你喜欢
- 注解是 JDK 5.0 引入的一种注释机制。注解可以作用在类型(类、接口、枚举等)、属性、方法、参数等不同位置,具体的 JDK
- 建造者模式(Builder Pattern)主要用于“分步骤构建一个复杂的对象”,在这其中“分步骤”是一个稳定的算法,而复杂对象的各个部分则
- 做Java编程,难免会遇到多线程的开发,但是JDK8这个CompletableFuture类很多开发者目前还没听说过,但是这个类实在是太好用
- 数组的长度是固定的,无法适应数据变化的需求。为了解决这个问题,Java提供了另一个容器 java.util.ArrayList集合类,让我们
- 在项目中使用Maven管理jar包依赖,往往会出现以下状况:1、国内访问maven默认远程中央镜像特别慢;2、使用阿里的镜像替代远程中央镜像
- 好久没有做web了,JSON目前比较流行,闲得没事,所以动手试试将对象序列化为JSON字符(尽管DotNet Framework
- timer和timertask是jdk自带的定时任务实现,无需导入第三方jar包来完成1、指定多久之后执行此任务,注意:只会执行一次publ
- SpringBoot版本:2.3.2.RELEASESpringBoot Data JPA版本:2.3.2.RELEASEJpaReposi
- 在上一节中,我带大家学习了详解SpringBoot集成Redis来实现缓存技术方案,尤其是结合Spring Cache的注解的实现方案,接下
- 在开发中,用到springboot项目,当打包后部署运行时,出现了这个问题,网上搜了好多,又是加META-INF配置,又是加啥的,感觉spr
- startActivityForResult与startActivity的不同之处在于:1、startActivity( )仅仅是跳转到目标
- 阿里终面在线编程题,写出来与大家分享一下 有一个单向链表
- 一直使用Eclipse环境开发Android,也尝鲜使用过Android Studio去开发,各种IDE配合Android SDK及SDK原
- strftime函数主要用于时间格式化,它的函数原型如下:size_t __cdecl strftime(char * __restrict
- 回顾Tomcat8打法先回顾下之前Tomcat789的打法这里先抛开 7 8之间的区别, 在8中,最后add到filterchain的都是一
- 一. CodeCache简介从字面意思理解就是代码缓存区,它缓存的是JIT(Just in Time)编译器编译的代码,简言之codeCac
- 1 关于自动内存管理Java是由jvm来管理内存,包括自动分配以及自动回收,因此它不容易出现内存泄漏和内存溢出问题。C/C++,由程序员手动
- 库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行。库分静态库和动态库两种。 一、静态库和动态库的区别1. 静态函数库这类库的
- 一. * 搭建及配置1 . * 简介 * 是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构件。有了 * 之后,当 Maven
- 后台控制层: public static final String HEAD_IMG_DIR = "D:/upload/&quo