Java-Äquivalent von Pythons getattr?

8

Ich konvertiere etwas Python-Code in Java und habe eine Situation, in der ich Methoden eines Objekts aufrufen muss, aber erst zur Laufzeit weiß, welche Methoden. In Python löse ich das auf, indem ich getattr für mein Objekt verwende und eine Zeichenfolge übergebe, die der Name meiner Methode ist. Wie würden Sie etwas Ähnliches in Java machen?

    
Johnny 09.12.2010, 12:56
quelle

5 Antworten

11

Class.getField ist dein Freund. Es wird wahrscheinlich nicht sehr einfach sein, da Python dynamisch typisiert ist und Java statisch getippt ist (es sei denn, Sie kennen die Typen Ihrer Felder im Voraus).

EDIT: Wie man diese Beispiele übersetzt. Ссылка

Attributsuche

Python

%Vor%

Java

%Vor%


Methodenaufruf

Python

%Vor%

Java

%Vor%

In den einfacheren Fällen müssen Sie wissen, ob Sie ein Feld oder eine Methode haben. vor allem, da sie den gleichen Namen haben können. Zusätzlich können Methoden überladen werden, so dass Sie wissen müssen, welche Methodensignatur Sie möchten.

Wenn es Ihnen egal ist, welche Methode oder welches Feld Sie erhalten, können Sie dies relativ einfach als Hilfsmethode implementieren.

    
NPE 09.12.2010 12:58
quelle
0

Sie können hier starten, um mehr über Java Reflection zu erfahren.

    
kgiannakakis 09.12.2010 12:58
quelle
0

Sie können Java-Reflektion verwenden, aber es gibt keine genaue Entsprechung von getattr .

    
khachik 09.12.2010 12:58
quelle
0

In Java machst du das mit der Reflection API (und es ist normalerweise ziemlich umständlich).

MethodUtils in Apache Commons Das BeanUtils-Projekt kann die Arbeit etwas erleichtern, obwohl es eine ziemlich starke Abhängigkeit von etwas Einfachem wie diesem ist.

    
Dmitri 09.12.2010 13:00
quelle
0

Sie sollten die Reflection-API verwenden. Da die pure API ein wenig ... unnahbar ist, sollten Sie sich Helfer wie commons beanutils oder reflexionen .

    
Aaron Digulla 09.12.2010 13:03
quelle

Tags und Links