3 Stimmen

readMethod() verwenden, um eine Eigenschaft eines Objekts in Java aufzurufen?

Hallo Leute, ich habe das Problem des Aufrufs einer Eigenschaft eines Objekts (z.B. JButton) durch die Verwendung von readMethod() der Reflection-Klasse, alle Ideen sind sehr geschätzt? Hier ist der Code:

 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");
        }

    }

0voto

Gopi Punkte 9905

Machen Sie es so -

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

Das zweite Argument von Invoke ist der Parameter, den Sie an die aufzurufende Methode übergeben möchten. In Ihrem Fall, wenn es sich um eine Lesemethode handelt, die keine Parameter benötigt, sollte dieses Argument auf null .

En toString() ist erforderlich, da setText einen String erwartet. Wenn der Rückgabetyp der Methode, die Sie aufrufen, String dann können Sie den Rückgabewert direkt in String statt des Aufrufs toString

Edit: Wie @Thilo bemerkte, ist seit java5 invoke eine variable Anzahl von Argumenten unterstützt, können Sie das zweite Argument einfach weglassen.

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X