转自: http://blog.csdn.net/csdn1234/article/details/2568145
1.Class getDeclaringClass()
返回本类的申明处。一个类可能是在另一个类内部定义的.
- System.out.println("Son.ClassS_Pub.class.getDeclaringClass:" + Son.ClassS_Pub.class.getDeclaringClass());
- System.out.println("ArrayList.class.getDeclaringClass:" + ArrayList.class.getDeclaringClass());
- System.out.println("Son.class.getDeclaringClass:" + Son.class.getDeclaringClass());
输出结果:
Son.ClassS_Pub.class.getDeclaringClass:class Son
ArrayList.class.getDeclaringClass:null
Son.class.getDeclaringClass:null
2.Class getEnclosingClass()
返回本类的立即封装类。定义此类的外部类.
- System.out.println("Son.ClassS_Pub.class.getEnclosingClass:" + Son.ClassS_Pub.class.getEnclosingClass());
- System.out.println("ArrayList.class.getEnclosingClass:" + ArrayList.class.getEnclosingClass());
- System.out.println("Son.class.getEnclosingClass:" + Son.class.getEnclosingClass());
输出结果:
Son.ClassS_Pub.class.getEnclosingClass:class Son
ArrayList.class.getEnclosingClass:null
Son.class.getEnclosingClass:null
与getDeclaringClass无二. 两者的区别在于内部匿名类
3.区别
- public class Son{
- public MyInterface getInterfaceInstance() {
- return new MyInterface() {
- public void sayHello() {
- System.out.println("ArrayList.class.getEnclosingClass:" + this.getClass().getEnclosingClass());
- System.out.println("ArrayList.class.getDeclaringClass:" + this.getClass().getDeclaringClass());
- System.out.println("Hello, nice to meet you!");
- }
- };
- }
- public static void main(String args[]) throws Exception{
- Son s = new Son();
- MyInterface inst = s.getInterfaceInstance();
- inst.sayHello();
- }
- }
输出的结果是:
getEnclosingClass:class Son
getDeclaringClass:null
getEnclosingClass对内部匿名类也有效.
相关推荐
Java 反射可以分为三大类:类反射、方法反射和构造器反射。 类反射 Java 反射可以获取类的信息,例如类的名称、类的属性、类的方法等。使用 Class.forName() 方法可以获取类的对象,然后使用 getMethods() 方法...
3. **`getDeclaringClass()` 方法**:返回枚举常量所属的类。 ```java Class<? extends Enum<?>> clazz = Direction.East.getDeclaringClass(); // 输出 class Direction ``` #### 四、枚举类型的高级用法 1. *...
枚举的本质是 java.lang.Enum 的子类,它提供了一些基本方法,如 values()、name()、ordinal()、getDeclaringClass()、equals() 等。 枚举的特性: 1. 枚举的本质是 java.lang.Enum 的子类。 2. 枚举是一种特殊的...
- `getDeclaringClass()`:获取声明该方法的类。 在实际开发中,`getMethods()`经常用于以下场景: 1. **代码生成**:根据类的方法信息自动生成相应的代码模板。 2. **动态调用**:通过反射调用方法,特别是在框架...
标题中的“在自定义Spring AOP中使用EL获取拦截方法的变量值”指的是在Spring的面向切面编程(AOP)中,通过Expression Language(EL,表达式语言)来访问被拦截方法的局部变量值。这通常涉及到Spring的代理机制、...
- `getDeclaringClass()`:错误选项,此方法用于获取声明成员的类,而不是获取类的`Class`对象。 4. `String`类特性: - `String`是`Object`的子类。 - `equals()`方法在`String`中被重写,用于比较字符串内容而...
`Class.getSuperclass()`方法可以获取一个类的父类,而`Method.getDeclaringClass()`可以确定方法或字段是在哪个类中声明的。 8. **SampleName.java**:这可能是一个关于如何获取类、接口、方法或字段的名称的示例...
- `getDeclaringClass()`是用于获取声明成员的类,而非获取类的`Class`对象。 4. `String`类特性: - `String`是不可变的,不能改变其长度。 - `String`继承自`Object`类,并重写了`equals()`方法。 - `String`...
例如,我们可以使用`CtClass`和`CtMethod`等类来创建或修改方法,然后使用`toClass()`方法将它们转换为实际的Java类。 以下是一个简单的例子,展示了如何使用`javassist`动态创建一个类并添加一个方法: ```java ...
- `getDeclaringClass()`:返回枚举常量所属的枚举类的`Class`对象。 - `name()`:返回枚举常量的名称,即在枚举声明中使用的字符串。 - `ordinal()`:返回枚举常量的序数,即它在枚举声明中的位置,第一个常量的...
- `getDeclaringClass()`:返回枚举常量所属的枚举类。 - `name()`:返回枚举常量的名称。 - `ordinal()`:返回枚举常量的序数。 - `toString()`:返回枚举常量的名称。 5. **自定义属性和方法** 你可以在枚举...
5. **Modifier类**:`Modifier`类提供了用于获取字段、方法和构造器修饰符信息的方法。 #### 应用案例 1. **模仿instanceof运算符** 在Java中,`instanceof`是一个关键字,用于判断一个对象是否是某个类的实例。...
5. getDeclaringClass() 方法:返回与此枚举常量的枚举类型相对应的 Class 对象。 使用枚举类可以解决 int 和 String 枚举模式带来的诸多不足,如命名空间、描述性、安全性等问题。枚举类可以保证编译时的类型安全...
Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、对象、方法和字段。在Java中,反射机制是通过`java.lang.Class`、`java.lang.reflect.Constructor`、`java.lang.reflect.Field`和`...
Java反射是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并进行操作,如创建对象、调用方法、访问属性等。在本文中,我们将深入理解Java反射的概念,掌握其核心实现,并探讨它在实际开发中的...
Java动态代理是Java语言中一个强大的特性,它允许我们在运行时创建代理类,这些代理类可以拦截并增强原对象的方法调用。在本篇中,我们将深入探讨如何使用Java动态代理来实现Xutils的注入模块。Xutils是一个知名的...
在枚举内部,可以通过`Enum<E extends Enum<E>>`的泛型方法`getDeclaringClass()`获取枚举常量所属的枚举类,以及`name()`和`ordinal()`方法获取常量的名称和在枚举中的位置。 总结来说,Java枚举类型提供了一种...
- **获取声明的类(getDeclaringClass())**:可以使用`getDeclaringClass()`获取枚举常量所在的类。 - **名称(name())**:`name()`方法返回枚举常量的名称,即定义时的字符串。 4. **从字符串创建枚举**: ...
我们需要自定义一个类实现`InvocationHandler`接口,并重写`invoke()`方法。在这个方法里,我们可以处理代理逻辑,比如添加额外的行为或改变原有的行为。 ```java public class MyInvocationHandler implements ...