导航:首页 > 方法技巧 > 如何用反射调用一个类的私有方法

如何用反射调用一个类的私有方法

发布时间:2022-09-25 11:17:33

Ⅰ C#如何通过反射调用父类的私有方法

举例如下:

classProgram
{
staticvoidMain(string[]args)
{
Console.WriteLine(newClassSub().CallBaseGetValue());
}
}

publicclassClassBase
{
privatestringGetValue()
{
return"Value";
}
}

publicclassClassSub:ClassBase
{
publicstringCallBaseGetValue()
{
//获取当前类型的父类型,即:ClassBase
Typetype=this.GetType().BaseType;
//获取父类的GetValue方法信息,其中BindingFlags.Public|BindingFlags.NonPublic|BindingFlags.Instance
//是说明要获取非公有(private、protected、internal)方法。
MethodInfotargetMethod=type.GetMethod("GetValue",BindingFlags.Public|BindingFlags.NonPublic|BindingFlags.Instance);

//调用方法
returntargetMethod.Invoke(this,newobject[0])asstring;
}
}

参考:网页链接

Ⅱ java中, 怎么调用别的类的私有方法

利用反射即可调用;
简易实例代码如下:
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
* @author thomaslwq
* @version 创建时间:Sep 4, 2012 9:53:49 PM
* 类说明
*/
public class ReflectionTest {

public static void setObjectColor(Object obj) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAcces***ception, InvocationTargetException{
Class cls = obj.getClass();
//获得类的私有方法
Method method = cls.getDeclaredMethod("privateMethod", null);
method.setAccessible(true); //没有设置就会报错
//调用该方法
method.invoke(obj, null);
}
public static void main(String args[]) throws SecurityException, IllegalArgumentException, NoSuchMethodException, IllegalAcces***ception, InvocationTargetException{

setObjectColor(new MyTest());
}
}
//测试类
class MyTest{


public void setMyTest(){
System.out.println("setMyTest");
}
/**
类的私有方法
**/
private void privateMethod(){
System.out.println("调用了 private Method");
}

}

Ⅲ 怎样通过反射机制调取内部类的私有方法

package com.syj.util.reflect;

import java.lang.reflect.Method;

/**
* <p>
* Title: 私有方法调用工具类
* </p>
*
* <p>
* Description:利用java反射调用类的的私有方法
* </p>
*
* <p>
* Copyright: Copyright (c) 2007
* </p>
*
* @author 孙钰佳
* @main [email protected]
* @date Jun 1, 2008 10:18:58 PM
*/
public class PrivateUtil {
/**
* 利用递归找一个类的指定方法,如果找不到,去父亲里面找直到最上层Object对象为止。
*
* @param clazz
* 目标类
* @param methodName
* 方法名
* @param classes
* 方法参数类型数组
* @return 方法对象
* @throws Exception
*/
public static Method getMethod(Class clazz, String methodName,
final Class[] classes) throws Exception {
Method method = null;
try {
method = clazz.getDeclaredMethod(methodName, classes);
} catch (NoSuchMethodException e) {
try {
method = clazz.getMethod(methodName, classes);
} catch (NoSuchMethodException ex) {
if (clazz.getSuperclass() == null) {
return method;
} else {
method = getMethod(clazz.getSuperclass(), methodName,
classes);
}
}
}
return method;
}

/**
*
* @param obj
* 调整方法的对象
* @param methodName
* 方法名
* @param classes
* 参数类型数组
* @param objects
* 参数数组
* @return 方法的返回值
*/
public static Object invoke(final Object obj, final String methodName,
final Class[] classes, final Object[] objects) {
try {
Method method = getMethod(obj.getClass(), methodName, classes);
method.setAccessible(true);// 调用private方法的关键一句话
return method.invoke(obj, objects);
} catch (Exception e) {
throw new RuntimeException(e);
}
}

public static Object invoke(final Object obj, final String methodName,
final Class[] classes) {
return invoke(obj, methodName, classes, new Object[] {});
}

public static Object invoke(final Object obj, final String methodName) {
return invoke(obj, methodName, new Class[] {}, new Object[] {});
}

/**
* 测试反射调用
*
* @param args
*/
public static void main(String[] args) {
PrivateUtil.invoke(new B(), "printlnA", new Class[] { String.class },
new Object[] { "test" });
PrivateUtil.invoke(new B(), "printlnB");
}
}

class A {
private void printlnA(String s) {
System.out.println(s);
}
}

class B extends A {
private void printlnB() {
System.out.println("b");
}
}
程序的输出结果为
test
b
说明private方法调用成功了不管是自己的私有方法还是父类的私有方法。

Ⅳ java反射调用private方法

Java程序不能访问持久化类的private方法,但是利用JAVA的反射机制可以实现调用,代码如下:

<spanstyle="font-size:14px;">
importjava.lang.reflect.InvocationTargetException;
importjava.lang.reflect.Method;
publicclassReflectDemo{
publicstaticvoidmain(String[]args)throwsException{
Methodmethod=PackageClazz.class.getDeclaredMethod("privilegedMethod",newClass[]{String.class,String.class});
method.setAccessible(true);
method.invoke(newPackageClazz(),"452345234","q31234132");
}
}
classPackageClazz{
privatevoidprivilegedMethod(StringinvokerName,Stringadb){
System.out.println("---"+invokerName+"----"+adb);
}
}
</span>
#程序输出结果为:---452345234----q31234132

Ⅳ java反射机制怎样调用类的私有方法

为了一看就懂,请看下面的示例(假设调用 MyTest类的私有方法 privateMethod()):

publicclassReflectionTest{

(Objectobj)throwsSecurityException,NoSuchMethodException,IllegalArgumentException,IllegalAcces***ception,InvocationTargetException{//核心代码加粗
Classcls=obj.getClass();
//获得类的私有方法
Methodmethod=cls.getDeclaredMethod("privateMethod",null);
method.setAccessible(true);//没有设置就会报错
//调用该方法
method.invoke(obj,null);
}
publicstaticvoidmain(Stringargs[])throwsSecurityException,IllegalArgumentException,NoSuchMethodException,IllegalAcces***ception,InvocationTargetException{

setObjectColor(newMyTest());
}
}
//测试类
classMyTest{

publicvoidsetMyTest(){
System.out.println("setMyTest");
}
/**
类的私有方法
**/
privatevoidprivateMethod(){
System.out.println("调用了privateMethod");
}

}

Ⅵ 如何用反射机制访问继承自私有类的方法,最好用java 实现。

明白你的意思了,Method是属于类的,不是属于对象的,意思就是这个对象可以访问这个方法,实际是访问的父类的方法,本身是没有的,所以,你得通过他的父类去查这个方法,给你个曾经用过的反射例子,你可以参考下:
/**
* 反射获得方法,若本类不存在该方法则递归调用父类查找,若方法始终不存在返回空
* @author lzxz
* @param clazz 类对象
* @param methodName 方法名
* @param parameterTypes 方法参数列表
* @return 此方法获得Method对象总是可用的
*/
public static Method getMethod(Class<?> clazz, String methodName, Class<?>... parameterTypes) {

Method method = null;
try {
if(clazz == null) return null;

method = clazz.getDeclaredMethod(methodName, parameterTypes);
method.setAccessible(true);

return method;
} catch (NoSuchMethodException e) {
return getMethod(clazz.getSuperclass(), methodName, parameterTypes);
}

}

Ⅶ 在一个类中如何调用另一个类的私有方法

用private修饰的方法,那是私有的..不管你外部哪里如何调用都不行的.这个都是jdk规定死的.公有方法可以调用..

就好比你媳妇和你身上的钱.都很重要..钱可以借别人用用..媳妇能借么?对吧.哪怕是父母兄弟.该借的能借.不能借的打死接不到..

当然.这私有方法就和媳妇一样..不管是谁..就是java他爸来也是没法访问私有的方法..所以.你在反射.也不行..这压根和注释都没有关系...

老大私有是啥概念.就是自己的东东..你要知道..媳妇能公有么?媳妇就是private的..那不是小姐.小姐是public的

Ⅷ 在一个类中如何调用另一个类的私有方法

利用反射在外部类生成调用类的对象,然后获取调用方法,并修改Accessible,然后执行方法

阅读全文

与如何用反射调用一个类的私有方法相关的资料

热点内容
真龙头的鉴别方法 浏览:850
给猫洗澡的方法有哪些 浏览:930
介绍姓氏的方法有哪些陈 浏览:440
快速求质因数的方法 浏览:700
项目管理涉及哪些工具技术和方法 浏览:652
牙根肿痛怎么治疗方法 浏览:815
叶轮出口面积的计算方法 浏览:18
08298的简便计算方法 浏览:535
特戊酸水分的检测方法 浏览:153
美容如何提高顾客进店的方法 浏览:955
电缆压铜鼻子有哪些方法 浏览:536
exagear模拟器使用方法 浏览:994
澄粉凉粉家庭版简单制作方法 浏览:258
有步骤有计划有方法开展 浏览:464
熏蒸有哪些方法 浏览:281
樱桃如何施肥方法 浏览:698
明月能源利多最佳使用方法 浏览:359
盆栽桂花树保暖的最佳方法 浏览:918
汽车充气泵补胎液连接方法 浏览:133
英语阅读教学方法视频 浏览:989