導航:首頁 > 方法技巧 > 如何用反射調用一個類的私有方法

如何用反射調用一個類的私有方法

發布時間: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,然後執行方法

閱讀全文

與如何用反射調用一個類的私有方法相關的資料

熱點內容
如何去除酒精保持清醒的幾種方法 瀏覽:477
什麼方法讓卵泡破 瀏覽:755
二極體b5100檢測方法 瀏覽:847
能源需求預測有哪些預測方法 瀏覽:867
線條上牆安裝方法視頻 瀏覽:446
編導影視分析答題方法 瀏覽:832
白色翻毛皮包臟了怎麼清洗的最佳方法 瀏覽:719
有什麼方法可以暖起來 瀏覽:380
肛裂便血的治療方法 瀏覽:89
風鈴拼裝採用的方法與步驟 瀏覽:319
聖誕樹上的掛件製作方法圖片 瀏覽:929
間歇性斜視的治療方法 瀏覽:915
吃完飯放鬆的正確方法 瀏覽:680
兔子飼養方法圖片 瀏覽:661
頸椎病常用的康復方法哪種除外 瀏覽:907
幼升小擇校熱的解決方法 瀏覽:866
感測器的分析方法有哪幾種 瀏覽:680
360禁止網路在哪裡設置方法 瀏覽:932
茶斑去除最簡單方法 瀏覽:164
如何理解體育教學方法的含義 瀏覽:908