Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.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中使用readMethod()调用对象的属性?_Java_Reflection - Fatal编程技术网

在java中使用readMethod()调用对象的属性?

在java中使用readMethod()调用对象的属性?,java,reflection,Java,Reflection,大家好,我遇到了使用反射类的readMethod()调用对象属性(例如JButton)的问题,有什么好主意吗? 代码如下: private void PropertySelectedFromList(java.awt.event.ActionEvent evt) { // add code here String propertyName = (String)PropertyLi

大家好,我遇到了使用反射类的readMethod()调用对象属性(例如JButton)的问题,有什么好主意吗? 代码如下:

 private void PropertySelectedFromList(java.awt.event.ActionEvent evt) {                                          
        // add code here
        String propertyName = (String)PropertyList.getSelectedItem();
        PropertyType.setEnabled(true);     
        PropertyType.setText("Text" + propertyName);
        PropertyValue.setEnabled(true);
        PropertyDescriptor dpv = PropValue(props, propertyName);
        Method readMethod = dpv.getReadMethod();
        if(readMethod != null){
            String obtName = (String) ObjectList.getSelectedItem();
            Object ob = FindObject(hm, obtName);// retrieving object from hashmap 
            aTextField.setText(readMethod.invoke(ob, ???));<----------here is the problem
        }
        else{
            PropertyValue.setText("???");
        }
        Method writeMethod = dpv.getWriteMethod();
        if(writeMethod != null){
            System.out.println(writeMethod);
        }
        else{
            System.out.println("Wrong");
        }

    }           
private void PropertySelectedFromList(java.awt.event.ActionEvent evt){
//在这里添加代码
String propertyName=(String)PropertyList.getSelectedItem();
PropertyType.setEnabled(true);
PropertyType.setText(“文本”+propertyName);
PropertyValue.setEnabled(真);
PropertyDescriptor dpv=PropValue(props,propertyName);
方法readMethod=dpv.getReadMethod();
if(readMethod!=null){
字符串obtName=(字符串)ObjectList.getSelectedItem();
Object ob=FindObject(hm,obtName);//从hashmap检索对象
aTextField.setText(readMethod.invoke(ob,??);这样做-

aTextField.setText((readMethod.invoke(ob, null)).toString());
要调用的第二个参数是要传递给要调用的方法的参数。在您的情况下,假设它是一个读取方法并且不需要参数,则此参数应设置为
null

toString()
是必需的,因为setText需要字符串。如果调用的方法的返回类型是
String
,则可以直接将返回值键入
String
,而不是调用
toString

编辑:正如@Thilo所指出的,由于java5
invoke
支持可变数量的参数,您可以跳过第二个参数

aTextField.setText((readMethod.invoke(ob)).toString());

invoke方法接受两个参数,当您只想传递'ob'时它会抱怨,因为Java5,method.invoke接受varargs:@Thilo是的,我错过了!将更新我的答案。谢谢您的建议。