Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用变量作为对象名来调用对象方法_Java_Object_Reflection_Methods - Fatal编程技术网

Java 使用变量作为对象名来调用对象方法

Java 使用变量作为对象名来调用对象方法,java,object,reflection,methods,Java,Object,Reflection,Methods,我有一个包含两个不同对象的类 我可以使用getDeclaredFields获取所有对象的名称列表, 但是我想在这些对象中调用一个方法。 我该怎么做 ClassA a = new ClassA(); Class cls = c.getClass(); Field[] fields = cls.getDeclaredFields(); for(int i = 0; i< fields.length;i++) { System.out.println("Field = " + fields

我有一个包含两个不同对象的类

我可以使用getDeclaredFields获取所有对象的名称列表, 但是我想在这些对象中调用一个方法。
我该怎么做

ClassA a = new ClassA();
Class cls = c.getClass();
Field[] fields = cls.getDeclaredFields();
for(int i = 0; i< fields.length;i++) {
   System.out.println("Field = " + fields[i].toString());
   System.out.prontln(fields[i].method()) // how can I call the method from object fields[i]             
}
ClassA=newclassa();
类cls=c.getClass();
Field[]fields=cls.getDeclaredFields();
for(int i=0;i

更多信息:我使用反射的原因是我想写一个测试类,可以用来测试所有其他类的对象是否正确存在

testclass(类a),获取类a中的所有对象名称,并使用object.exists()方法验证此对象的存在性

这是我的代码:我有一些对话框类,每个对话框类都有一些menuitem类,checkbox类,textfield类,我想写一个类,可以用来验证所有的checbox,textfield是否存在(使用checkbox.exist(),textfield.exist()…)在给定的对话框中

ToolsMenu c = new ToolsMenu();
        Class cls = c.getClass();
        Field[] fields = cls.getDeclaredFields();
        for(int i = 0; i< fields.length;i++) {
            System.out.println("Field = " + fields[i].toString());
            println( fields[i].getDeclaringClass().exists()
ToolsMenu c=newtoolsmenu();
类cls=c.getClass();
Field[]fields=cls.getDeclaredFields();
for(int i=0;i

我可以使用getdeclaringclass来获取field[I]类,但是我如何调用在复选框textfields类中定义的method exists()。

我完全不知道为什么要使用反射。你可以简单地这样做

a.field.method()

如果
字段
及其
方法()
声明正确的访问修饰符。

我不知道为什么要使用反射。您可以简单地

a.field.method()

如果
字段
及其
方法()
声明正确的访问修饰符。

您可以这样调用它:

...
Class clazz= fields[i].get(c).getClass();
clazz.getMethod("methodName").invoke(fields[i].get(c));
...

其中,
“methodName”
是应该调用的方法的名称。您还可以将一些参数传递给该方法。

您可以使用如下方式调用它:

...
Class clazz= fields[i].get(c).getClass();
clazz.getMethod("methodName").invoke(fields[i].get(c));
...


其中
“methodName”
是应该调用的方法的名称。您还可以将一些参数传递给该方法。

您感兴趣的字段类型是什么,方法是什么?我建议您搜索“java反射api”。关于如何实现这一点,有很多教程可供参考。但我的问题是:首先为什么要使用反射?您是否尝试调用任何方法,或者是否知道方法签名?我使用反射的原因是我想编写一个测试类,该类可用于测试所有其他类的对象是否正确存在testclass(类a),获取类a中的所有对象名称,并使用object.exists()方法验证此对象的存在性。那么您感兴趣的字段类型是什么,方法是什么?我建议您搜索“java反射api”。关于如何实现这一点,有很多教程可供参考。但我的问题是:首先为什么要使用反射?您是否尝试调用任何方法,或者是否知道方法签名?我使用反射的原因是我想编写一个测试类,该类可用于测试所有其他类的对象是否正确存在ng.testclass(类a),获取类a中的所有对象名称,并使用object.exists()方法验证此对象的存在。您应该使用c而不是clsfields[i]将返回对象的名称,我认为我们不能使用字符串来调用对象的方法。
fields[i]
将返回
字段
对象。您应该使用c而不是clsfields[i]将返回对象的名称,我认为我们不能使用字符串调用对象的方法。
字段[i]
将返回
字段
对象。我认为
方法()
就是一个例子,OP不知道他调用的方法的名称,这就是他使用反射的原因。但是,这本身没有太大意义……字段是字段[]中的字符串,我如何将其传输到类?在使用declaredfield之前,我不知道字段的名称,在declaredfield之后,我们可以使用.field[i]吗.method()?@bitma我的答案假设您知道字段和方法的名称。如果您不知道这些名称,那么您肯定需要使用反射。我建议您查看帮助。我认为
method()是
就是一个例子,OP不知道他调用的方法的名称,这就是他使用反射的原因。但是,这本身没有太大意义……字段是字段[]中的字符串,我如何将其传输到类?在使用declaredfield之前,我不知道字段的名称,在declaredfield之后,我们可以使用.field[i]吗.method()?@bitma我的答案假设您知道字段和方法的名称。如果您不知道这些名称,那么您当然需要使用反射。我建议您查看以获得帮助。