Java里面怎么通过变量中的值执行某个对象中相应的方法
答案:5 悬赏:40
解决时间 2021-02-18 05:16
- 提问者网友:冰点阿弟
- 2021-02-17 08:41
有一个String类型的变量meName,然后还有一个类MyCal的对象my,现在比如说MyCal里面有A,B,C,D ……多个方法(方法非静态,少说也有百个),现在要meName是A的话就执行my对象中的A方法,是B的话就执行B方法。我要怎么做呢?用反射机制可以吗?要怎么写?
最佳答案
- 二级知识专家网友:都不是誰的誰
- 2021-02-17 10:09
你想过一个问题没有,如果我在MyCal里面有一个方法是A() 还有一个方法是A(int a) 。那我meName如果是A,那么到底执行哪个方法呢?? 所以不仅要给方法名,还必须要给参数的类型才行吧。
当然,如果你的A B C D都是A() B() C()这种无参的方法,那就好办了,给你一个例子:
import java.lang.reflect.Method;
public class Test {
public static void main(String[] args) throws Exception {
String s="A";
Class clazz =Test.class;
Method method =clazz.getMethod(s);
method.invoke(clazz.newInstance());
}
public void A(){
System.out.println("方法A执行了");
}
}
当然,如果你的A B C D都是A() B() C()这种无参的方法,那就好办了,给你一个例子:
import java.lang.reflect.Method;
public class Test {
public static void main(String[] args) throws Exception {
String s="A";
Class clazz =Test.class;
Method method =clazz.getMethod(s);
method.invoke(clazz.newInstance());
}
public void A(){
System.out.println("方法A执行了");
}
}
全部回答
- 1楼网友:堕落奶泡
- 2021-02-17 13:18
肯定用反射才能实现。
对象有了,还知道是什么类型,就可以取它的方法了,但是你要知道方法的参数~
- 2楼网友:一个很哇塞的汉子
- 2021-02-17 12:22
你说的这个 meName 和 MyCal有什么关系吗?
需要用到序列化的东西吗???
反射机制应该用到,可不清楚你的问题啊
- 3楼网友:情战辞言
- 2021-02-17 11:39
a
- 4楼网友:承载所有颓废
- 2021-02-17 10:45
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class TestClass{
public static void main(String[] args) throws IllegalAccessException,
InvocationTargetException, NoSuchMethodException {
stud1 s = new stud1();
Method[] mm = s.getClass().getMethods();
for (int i = 0; i < mm.length; i++) {
System.out.println(mm[i]);
}
}
}
class stud1 {
public void m1() {
}
public String m2() {
return "x";
}
public int m3() {
return 1001;
}
}
返回结果:
public void stud1.m1()
public java.lang.String stud1.m2()
public int stud1.m3()
public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
public final void java.lang.Object.wait() throws java.lang.InterruptedException
public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
public boolean java.lang.Object.equals(java.lang.Object)
public java.lang.String java.lang.Object.toString()
public native int java.lang.Object.hashCode()
public final native java.lang.Class java.lang.Object.getClass()
public final native void java.lang.Object.notify()
public final native void java.lang.Object.notifyAll()
我是这样的思路从输出结果我们不难看出自己定义的类的方法总有个类名加方法名
所以只要把类名+方法名截取出来后再把类名也截取掉剩下的就是你想要的方法名
最后拿这个方法名与meName比较就可以了
以上希望对你有所帮助!
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯
• 手机登qq时,显示手机磁盘不足,清理后重新登 |
• 刺客的套装怎么选啊? |