借用Java的Invoke反射,帶呼叫其他類的方法
類A中有一個成員是類B的物件c,如何在c中呼叫A的成員方法或者向A傳遞引數,發訊號。多謝。
回答:
可以使用invoke反射,實現這樣的機制。其實也就是Spring裡面的Ioc了。
最好是用第三方做執行載體。我這裡為了描述方便,也放在ClassB裡面的Object c透過Invoke呼叫這兩方法
import java.lang.reflect.Method;
public class ClassA {
//ClassA裡面有add、和StringAdd兩個不同方法。c是ClassB的Object
ClassB c=new ClassB();
public void add(Integer param1, Integer param2) {
System.out.println(param1 + param2);
}
public void StringAdd(String abc){
System.out.println("out"+abc);
}
public static void main(String[] args){
ClassA a=new ClassA();
try {
a.c.invokeMehton(a, "add",new Object[] {new Integer(100),new Integer(200)});//反射呼叫方法add
a.c.invokeMehton(a, "StringAdd",new Object[] {new String("abccc")});//反射呼叫方法StringAdd
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class ClassB{
public ClassB(){
System.out.println("this is ClassB");
}
public Object invokeMehton(Object owner,String methodName,Object[] args) throws Exception{
//根據methodName獲得owner裡面的方法。args是對應方案引數。
Class wnerClass=owner.getClass();
Class[] argsClass=new Class[args.length];
for(int i=0,j=args.length;i
}
Method method = ownerClass.getMethod(methodName, argsClass);
return method.invoke(owner, args);
}
}
輸出為
this is ClassB
300
outabccc
說明c呼叫Class方法成功。
可以看看設計模式和Invoke相關的文章,方便理解
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22259926/viewspace-625469/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 用反射呼叫Method類的invoke方法反射
- java反射機制之Method invoke執行呼叫方法例子Java反射
- java反射呼叫set和get方法的通用類Java反射
- 簡述java反射機制之Method invoke執行呼叫方法例子Java反射
- java反射構建物件和方法的反射呼叫Java反射物件
- C#通過反射獲取類中的方法和引數個數,反射呼叫方法帶引數C#反射
- java對過反射呼叫方法Java反射
- 在例項中呼叫 Invoke 型別的類型別
- c# 類的反射例項 (GetType().Invoke().GetMethod().CreateInstance())C#反射
- C# 反射呼叫擴充類方法C#反射
- Java反射機制demo(五)—獲得並呼叫一個類中的方法Java反射
- 反射+Class類方法_利用反射分析類的能力反射
- Java 方法的反射Java反射
- method.invoke(...)反射點反射
- PHP呼叫java類的兩種方法(轉)PHPJava
- java反射—— 對類的分析Java反射
- 深入理解Java中的反射機制和使用原理!詳細解析invoke方法的執行和使用Java反射
- PHP --反射 --獲取類的方法PHP反射
- JAVA的反射機制==>用反射分析類的實現Java反射
- Java中的類反射機制Java反射
- Java反射與hook混用反射某支付的方法Java反射Hook
- Java反射—方法的反射、深入瞭解泛型Java反射泛型
- C#中的平臺呼叫(P/Invoke)C#
- 反射可以取到原始呼叫方法的變數名嗎?反射變數
- java反射之Class類Java反射
- C# 如何利用反射來載入程式集,並呼叫程式集中有關類的方法C#反射
- Java基礎——方法的呼叫Java
- PHP通過反射實現物件的成員方法呼叫PHP反射物件
- php中呼叫類的私有方法PHP
- Java jvm 類載入 反射JavaJVM反射
- Java類反射再次升級Java反射
- Java 通過反射獲取類的資訊(成員變數,成員方法,構造方法)Java反射變數構造方法
- 在JavaScript中借用方法JavaScript
- JAVA“類”陣列的建立與呼叫Java陣列
- .NET Core反射獲取帶有自定義特性的類,透過依賴注入根據Attribute後設資料資訊呼叫對應的方法反射依賴注入
- 關於JMX中MBeanServer的invoke()方法BeanServer
- (C#)利用反射動態呼叫類成員C#反射
- Scala呼叫Java類Java