反射来实例化匿名内部类
时间: 2024-01-04 22:19:13 浏览: 139
反射机制可以用来实例化匿名内部类,但需要注意一些访问异常的问题。下面是一个示例代码来演示如何使用反射来实例化匿名内部类:
```java
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
public class Main {
public static void main(String[] args) {
try {
// 获取匿名内部类的构造方法
Constructor<?> constructor = OuterClass.InnerClass.class.getDeclaredConstructors()[0];
constructor.setAccessible(true);
// 实例化匿名内部类
Object innerInstance = constructor.newInstance(new OuterClass());
// 调用匿名内部类的方法
innerInstance.getClass().getMethod("innerMethod").invoke(innerInstance);
} catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
e.printStackTrace();
}
}
}
class OuterClass {
public void outerMethod() {
System.out.println("Outer method");
}
abstract class InnerClass {
public abstract void innerMethod();
}
}
```
在上面的代码中,我们通过反射获取了匿名内部类的构造方法,并将其设置为可访问。然后使用构造方法实例化了匿名内部类,并调用了匿名内部类的方法。
需要注意的是,由于匿名内部类没有名称,所以我们无法直接通过类名来获取构造方法。我们可以使用`getDeclaredConstructors()`方法获取所有的构造方法,然后通过索引来获取匿名内部类的构造方法。
阅读全文