admin管理员组文章数量:1566356
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">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() {
@Override
public void sayHello() {
System.out.println(this.getClass().getEnclosingClass());
System.out.println(this.getClass().getDeclaringClass());
}
};
}
}
}
本文标签: classgetEnclosingClassgetDeclaringClass
版权声明:本文标题:Class.getEnclosingClass 和 Class.getDeclaringClass 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/xitong/1725430157a1022821.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论