Class.getEnclosingClass 和 Class.getDeclaringClass
1、getDeclaringClass
return the declaring class for this class
获取对应类的声明类Class对象
2、getEnclosingClass
return the immediately enclosing class of the underlying class
(获取对应类的直接外部类Class对象)
区别:
两者的区别在于匿名内部类的使用上、getEnclosingClass能够获取匿名内部类对应的外部类Class对象,而getDeclaringClass不能够获取匿名内部类对应的声明类Class对象。
代码示例:
/*** @author <a href="wangte@meitaun.com">Te</a>* @date created at 2019/5/6*/
public class ClassTest {/*** 1、Class.GetEnclosingClass* <doc>获取对应类的直接外部类Class对象</doc>* 2、Class.GetDeclaringClass* <doc>获取对应类的声明类Class对象</doc>* 3、两者的区别* <p>* GetEnclosingClass与GetDeclaringClass很相近* 两者的区别在于匿名内部类、getEnclosingClass对匿名内部类也有效*/public static void main(String[] args) {Class<?> enclosingClass = InnerClass.class.getEnclosingClass();System.out.println(enclosingClass.getName());Class<?> declaringClass = InnerClass.class.getDeclaringClass();System.out.println(declaringClass.getName());//注意:GetEnclosingClass获取的是直接定义该类的外部类Class实例、这点和getDeclaringClass一致Class<?> enclosingClass1 = InnerClass.InnerInnerClass.class.getEnclosingClass();System.out.println(enclosingClass1.getName());Class<?> declaringClass1 = InnerClass.InnerInnerClass.class.getDeclaringClass();System.out.println(declaringClass1.getName());//针对匿名内部类的测试DifferentBetweenClassGetEnclosingClassAndDeclaringClass s = new DifferentBetweenClassGetEnclosingClassAndDeclaringClass();HelloService inst = s.getHelloService();inst.sayHello();}private class InnerClass {private class InnerInnerClass {}}public interface HelloService {void sayHello();}public static class DifferentBetweenClassGetEnclosingClassAndDeclaringClass {HelloService getHelloService() {//匿名内部类return new HelloService() {@Overridepublic void sayHello() {System.out.println(this.getClass().getEnclosingClass());System.out.println(this.getClass().getDeclaringClass());}};}}
}
Class.getEnclosingClass 和 Class.getDeclaringClass相关推荐
- Class类中的getEnclosing*、getDeclared*与getDeclaringClass的区别
一.getEnclosing* 当前类在--中闭合 Class<?> getEnclosingClass() 返回底层类的立即封闭类. Constructor&l ...
- java is not a enclosing class_Java Class getEnclosingClass()用法及代码示例
java.lang.Class类的getEnclosingClass()方法用于获取该类的封闭类.如果该类是本地类或在该类中声明的匿名类,则该方法返回该类的封闭类.否则,此方法返回null. 用法: ...
- java 根据类名示例化类_Java类类getEnclosingClass()方法及示例
java 根据类名示例化类 类的类getEnclosingClass()方法 (Class class getEnclosingClass() method) getEnclosingClass() ...
- Java类类的getDeclaringClass()方法和示例
类的类getDeclaringClass()方法 (Class class getDeclaringClass() method) getDeclaringClass() method is avai ...
- Java枚举getDeclaringClass()方法与示例
枚举类getDeclaringClass()方法 (Enum Class getDeclaringClass() method) getDeclaringClass() method is avail ...
- java的constructor怎么用,Java Constructor getDeclaringClass()用法及代码示例
构造函数类提供有关一个类的单个构造函数的信息,并且还提供对那个构造函数的访问. 的getDeclaringClass()的方法java.lang.reflect.Constructor用于返回表示声明 ...
- java enum in class_Java 8需要一个转换,而Java 7没有 – enum.getClass/getDeclaringClass
我意识到Java 8仍然在测试版,但是这一点让我很奇怪: public class Fields> { public Fields(Set columns) { // A sample colu ...
- 深入理解Java类型信息(Class对象)与反射机制
关联文章: 深入理解Java类型信息(Class对象)与反射机制 深入理解Java枚举类型(enum) 深入理解Java注解类型(@Annotation) 深入理解Java并发之synchronize ...
- Spring注解编程基石(四)
目录 AnnotationsScanner 扫描方法 扫描source为Class方法 扫描source为Method方法 辅助方法 MergedAnnotationSelector MergedAn ...
最新文章
- 黎曼曲面Riemann Surface
- 【怎样写代码】工厂三兄弟之抽象工厂模式(五):扩展案例I
- Oracle 如何设置shared pool 和sga大细, 应该设置几大
- 软件工程师必备的24个软技能
- 从硬件到框架,30+巨头参与的AI基准竞争结果公布(第一回合)
- transform与fit_transform的区别
- Dajngo-Xadmin 修改菜单摆放排序
- javascript内存泄露
- 懒惰是人类进步的动力,勤奋是实现偷懒的途径
- shell 脚本中常用的列表
- RDLC报表横向放纸不能横向打印问题解决
- 日常计算机网络基础练习题(每天进步一点点系列)
- unity编程实践-牧师与魔鬼动作分离版
- php nl2p,PHP函数nl2br()与自定义函数nl2p()换行用法分析,nl2brnl2p_PHP教程
- 操作系统作业:向内核中添加一个系统调用
- Ubuntu12更新重启之后,只在左上角出现一闪一闪的小横杠
- 如何隐藏 MacBook Pro 上奇怪的刘海
- ajax牙椅aj11,AJ11拆解图 AJ11配置拆解测评
- java 1加到100
- 在服务器centos 6.4上面安装nginx支持hls和Feng支持rtsp流协议