反射机制访问私有方法代码异常"java.lang.ClassCastException"
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了反射机制访问私有方法代码异常"java.lang.ClassCastException"相关的知识,希望对你有一定的参考价值。
package com.testspring.reflect;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
class PrivateCar
//①private成员变量:使用传统的类实例调用方式,只能在本类中访问
private String color;
//②protected方法:使用传统的类实例调用方式,只能在子类和本包中访问
protected void drive()
System.out.println("drive private car! the color is:"+color);
public class PrivateCarReflect
public static void main(String[] args) throws Throwable
ClassLoader loader = Thread.currentThread().getContextClassLoader();
Class clazz = loader.loadClass("com.baobaotao.reflect.PrivateCar");
PrivateCar pcar = (PrivateCar)clazz.newInstance();
Field colorFld = clazz.getDeclaredField("color");
//①取消Java语言访问检查以访问private变量
colorFld.setAccessible(true);
colorFld.set(pcar,"红色");
Method driveMtd = clazz.getDeclaredMethod("drive",(Class[])null);
//Method driveMtd = clazz.getDeclaredMethod("drive"); JDK5.0下使用
//②取消Java语言访问检查以访问protected方法
driveMtd.setAccessible(true);
driveMtd.invoke(pcar,(Object[])null);
PrivateCar pcar = (PrivateCar)clazz.newInstance();这一行出错了,提示cannot be cast to PrivateCar 这是为什么啊?请教各位,谢谢了
PrivateCar pcar = (PrivateCar)clazz.newInstance(); // package com.testspring.reflect;
虽然类名相同,但包名不同,不是同一个类,所以不能转换。
Java中只有类的和包名完全相同,才是同一个类。
改为:
com.baobaotao.reflect.PrivateCar pcar = (com.baobaotao.reflect.PrivateCar)clazz.newInstance();
或者
Class clazz = loader.loadClass("com.testspring.reflect.PrivateCar");本回答被提问者和网友采纳
以上是关于反射机制访问私有方法代码异常"java.lang.ClassCastException"的主要内容,如果未能解决你的问题,请参考以下文章