Reflection Exception

Status
Nicht offen für weitere Antworten.

MQue

Top Contributor
Moin,

ich versuch mich gerade in Reflections, funkt aber leider nicht ganz,
ich habe die folgenden Klassen wobei die untere Klasse sich in einer jar befindet und in das Projekt mit der ersten Klasse eingebunden wurde.

Hat jemand einen Rat was ich da falsch mache?
Vielen Dank,


Code:
package antidecompiletest;

import java.lang.reflect.Method;

public final class AntiDecompileTest {

    public static void main(String ... args) throws Throwable {
        String bothWords = append("Hello ", "everybody.");
        System.out.println(bothWords);
        }

    public static String append(String firstWord, String secondWord) throws Exception {
        Class c = Class.forName("testprojekt.Main");
        Method concatMethod = c.getMethod("ausgabe", new Class[] {String.class});
        String result = (String) concatMethod.invoke(firstWord, new Object[] {secondWord});
        return result;
        }
}


Aufzurufende Methode ausgabe:
Code:
package testprojekt;

public class Main implements java.io.Serializable {

    public String ausgabe(String ausgabe) {
        return new String("Aus der Methode ausgabe: " + ausgabe);
        }
}

Exception:
Code:
Exception in thread "main" java.lang.IllegalArgumentException: object is not an instance of declaring class
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at antidecompiletest.AntiDecompileTest.append(AntiDecompileTest.java:15)
        at antidecompiletest.AntiDecompileTest.main(AntiDecompileTest.java:8)
 

tfa

Top Contributor
Die invoke-Methode erwartet als ersten Parameter ein Objekt der Klasse, zu der die Methode gehört. Und das ist in deinem Fall testprojekt.Main. Du brauchst also erst ein Main-Objekt, um diese Methode aufrufen zu können.

Das hier
new String("Aus der Methode ausgabe: " + ausgabe)
ist übrigens immer schlecht. Schreibe statt dessen einfach
"Aus der Methode ausgabe: " + ausgabe
 

MarcB

Bekanntes Mitglied
Im Klartext:
Java:
public static String append(String firstWord, String secondWord) throws Exception {
        Class<?> c = Class.forName("testprojekt.Main");
        Method concatMethod = c.getMethod("ausgabe", new Class[] {String.class});
        String result = (String) concatMethod.invoke(c.newInstance(), firstWord + secondWord);
        return result;
        }
 

MQue

Top Contributor
funktioniert, vielen Dank,
eine Frage hätte ich noch und zwar wenn ich meine Methode so definiert habe:


Code:
public class Main implements java.io.Serializable {

    public void ausgabe(String ... ausgabe) {
        for (int i = 0; i < ausgabe.length; i++) {
            System.out.println(new Date(System.currentTimeMillis()) + "->" + ausgabe[i]);
            }
        }
}

was gebe ich dann hier als zweiten Parameter an:

Code:
Method concatMethod = c.getMethod("ausgabe", new Class[] {String.class});

PS: Reflection ist ja ziemlich mächtig, wo verwendet ihr Reflection, das was ich jetzt gemacht habe ist ja nahezu sinnlos, da ich gleich die Klasse importieren hätte können und dann die gewünschte Methode aufrufen,
Wäre sehr hilfreich, wenn ihr mir einige Anwendungsbeispiele geben könntet.
Vielen Dank,
 
Zuletzt bearbeitet:

MarcB

Bekanntes Mitglied
Da da
Java:
Method concatMethod = c.getMethod("ausgabe", Array.newInstance(String.class, 0).getClass());
        String result = (String) concatMethod.invoke(c.newInstance(), new Object[]{new String[]{firstWord, secondWord}});
müsste gehen.
Ist aber etwas ungewöhnlich.

PS: Reflection ist ja ziemlich mächtig, wo verwendet ihr Reflection, das was ich jetzt gemacht habe ist ja nahezu sinnlos, da ich gleich die Klasse importieren hätte können und dann die gewünschte Methode aufrufen,
Wäre sehr hilfreich, wenn ihr mir einige Anwendungsbeispiele geben könntet.
Vielen Dank,

Ich habe mal ein kleines Framework gebaut, um Objekte auf andere abbilden zu können, die dann mittels JAXB in XML übersetzt werden.
Hab mich am Ende aber doch für Fabrikmethoden entschieden, da das ganze viel zu umfangreich wurde, als das noch ein anderer Entwickler den Durchblick gehabt hätte, wie man mit meinem Code umgehen muss.

Aber man kann schon tolle Sachen damit anstellen.

Edit: Anwendungsbeitspiele sind OR-Mapper und JAXB. Fast alles was sich heutzutage Framework schimpft verwendet Reflecion.
 
Zuletzt bearbeitet:

MQue

Top Contributor
hab mich gerade noch mal informiert bzgl Reflections, mir ist das Untenstehende aber nicht klar,

void produce() f return new T(); // Compiler-Fehler -- wieso funktioniert das nicht?

Code:
Mit Typ-Parametern köonnen keine Objekte erzeugt werden:
class Factory<T> f ...
void produce() f return new T(); // Compiler-Fehler


Mit Reection kann das Problem gelöost werden:
static <T> T factory(Class<T> c, String param) f T result = c.newInstance();
...
return result;
gfactory(Person.class, "Andreas Lochbihler");
 

MQue

Top Contributor
Wie würdet ihr das machen, wenn ihr ein Programm schreiben wolltet, bei dem man zur Laufzeit Verhalten hinzufügen möchte (nicht viel Verhalten :)),
würdet ihr da gleich das OSGi hernehmen (was ja meines wissens auch auf Reflection beruht) oder RCP machen oder macht es Sinn, sich eine kleine Appi selber zu schreiben, um den overflow der ganzen Frameworks nicht mitschleppen zu müssen (wobei dann wahrscheinlich eine Idee auf die andere folgt und man dann doch wieder ein Framework benötigt)

Gibts vielleicht ein Tutorial, wo man sich selber sowas bauen kann?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Reflection gone wrong? Allgemeine Java-Themen 21
B Java Reflection Probleme beim wehcselseitigen Referenzieren zweier Klassen/Objekte Allgemeine Java-Themen 14
J Reflection Aufruf: .class durch .dll ersetzen Allgemeine Java-Themen 4
T Reflection - Abprüfen von Klasseneigenschaften Allgemeine Java-Themen 3
perlenfischer1984 Reflection : Element in generische Liste hinzufügen Allgemeine Java-Themen 4
J Reflection-Method Hook? Allgemeine Java-Themen 14
J Reflection mit Klasse und Subklasse Allgemeine Java-Themen 11
X public Getter ersetzen (Reflection?!) Allgemeine Java-Themen 3
A Reflection Problem Allgemeine Java-Themen 15
K Generic class und Reflection Allgemeine Java-Themen 2
G SecurityManager/Policy-File/Reflection Allgemeine Java-Themen 0
N Per Reflection auf (method) local inner class zugreifen? Allgemeine Java-Themen 3
E Reflection? Frage Allgemeine Java-Themen 4
B Reflection, invoke dynamisch befüllen Allgemeine Java-Themen 3
T Reflection Allgemeine Java-Themen 11
G Klassen Cast auf Argumentenklasse via Reflection? Allgemeine Java-Themen 10
H Collections Generics und Reflection Allgemeine Java-Themen 6
TheWhiteShadow Reflection-Lösung für Objektkopien Allgemeine Java-Themen 3
B Reflection: getMethods schlägt fehl (NoClassDefFoundE)) Allgemeine Java-Themen 15
P Reflection "Cast" Allgemeine Java-Themen 5
D Reflection-Performance Allgemeine Java-Themen 7
S Reflection und Generic Allgemeine Java-Themen 9
W Reflection -> getMethod bei optionalen Parametern Allgemeine Java-Themen 4
Kr0e Reflection - Instanz einer Klasse erstellen, ohne Default-Constructor Allgemeine Java-Themen 15
C Probleme mit dem Zugriff auf private Methode per reflection Allgemeine Java-Themen 2
C Zugriff auf private Methode per reflection geht nicht mehr Allgemeine Java-Themen 3
M Probleme mit Reflection Allgemeine Java-Themen 10
A Reflection Konstruktor Parameter Supertyp Allgemeine Java-Themen 2
D Vererbung, Reflection und automatischer Methodenaufruf Allgemeine Java-Themen 24
G Java Reflection Allgemeine Java-Themen 11
N Reflection: NoSuchMethodException obwohl Methode existiert Allgemeine Java-Themen 2
brunothg Problem mit Reflection Allgemeine Java-Themen 6
M reflection in inner classes Allgemeine Java-Themen 7
T Class-files zur Laufzeit zu Reflection-Zwecken laden Allgemeine Java-Themen 18
V Reflection - Field-Instanz und Annotations Allgemeine Java-Themen 6
Y Reflection und "extends" Schlüsselwort Allgemeine Java-Themen 3
R Reflection Problem Allgemeine Java-Themen 4
N getName() of reflection Object Allgemeine Java-Themen 4
P Reflection - Wie rufe ich die Felder einer Klasse in einer Methode der Basisklasse? Allgemeine Java-Themen 4
M Reflection Queue auslesen Allgemeine Java-Themen 6
N generic reflection Allgemeine Java-Themen 5
megachucky Java Reflection -> versteckte Felder finden? Allgemeine Java-Themen 3
R Problem mit Reflection und Generics Allgemeine Java-Themen 3
ruutaiokwu Per Reflection membervariablen überschreiben / zuweisen / nullen Allgemeine Java-Themen 5
T Zugriff per Reflection o.ä. möglich? Allgemeine Java-Themen 18
R Reflection: Membervariablen-Initialwerte Allgemeine Java-Themen 4
G Reflection Allgemeine Java-Themen 6
V reflection in java 5 und 6 Allgemeine Java-Themen 2
C Reflection Übergabeparamter überprüfen? Allgemeine Java-Themen 3
Ark Konstruktor per Reflection nicht bekannt Allgemeine Java-Themen 4
Q Objekte durch Reflection erzeugen Allgemeine Java-Themen 18
G [Reflection + WebService] Methodenaufruf an einem Proxy Allgemeine Java-Themen 11
T Parameternamen mit Reflection-API Allgemeine Java-Themen 14
M reflection mit parametern Allgemeine Java-Themen 8
M Reflection Frage Allgemeine Java-Themen 7
G Code vereinfachen bei Reflection Allgemeine Java-Themen 4
I reflection get inner static classes Allgemeine Java-Themen 2
C Reflection Allgemeine Java-Themen 12
Y Reflection - wie kann ich eine Methode benutzen Allgemeine Java-Themen 4
Y Reflection - wie anwenden/benutzen bei folgendem Problem Allgemeine Java-Themen 3
P Java Reflection API - ResultDataModel ? Allgemeine Java-Themen 3
R Object Dynamisch erzeugen (Reflection API) Allgemeine Java-Themen 22
N Design-Frage: persistent machen per Reflection Allgemeine Java-Themen 3
G Reflection: aktuelle bzw umschliessende Methode? Allgemeine Java-Themen 7
G per Reflection auf private Klassenattribute zugreifen? Allgemeine Java-Themen 9
G Reflection objekt mit generics erzeugen Allgemeine Java-Themen 5
M per reflection private attributsnamen auslesen Allgemeine Java-Themen 3
G Interface - Klassen implementieren das - Reflection ok? Allgemeine Java-Themen 4
C Reflection Problem! Allgemeine Java-Themen 2
G Object cast via Reflection Allgemeine Java-Themen 8
T Reflection und Typsicherheit Allgemeine Java-Themen 5
Q Umgang mit Reflection Allgemeine Java-Themen 4
S reflection Allgemeine Java-Themen 12
X Reflection performant? Allgemeine Java-Themen 11
M Reflection und Serializable Allgemeine Java-Themen 5
A Reflection - Variablen innerhalb einer Methode ermitteln Allgemeine Java-Themen 9
F Performance von Reflection vs Statisches Coden Allgemeine Java-Themen 4
the[V]oid Primitive Arrays per Reflection erzeugen? Allgemeine Java-Themen 2
W Package via Reflection parsen Allgemeine Java-Themen 4
R Interface mittels Reflection implementieren Allgemeine Java-Themen 8
M reflection Integer != int ? Allgemeine Java-Themen 3
M reflection invoce Allgemeine Java-Themen 3
K Reflection:Zugriff auf innere Klassen Allgemeine Java-Themen 4
N NoSuchMethodException bei Reflection-Versuch, aber warum? Allgemeine Java-Themen 3
byte Methodenaufruf per Reflection? Allgemeine Java-Themen 2
M Generics und Reflection Allgemeine Java-Themen 3
M Array per Reflection manipulieren Allgemeine Java-Themen 5
M Klassen von ausserhalb des Jars per Reflection nachladen Allgemeine Java-Themen 2
thE_29 Reflection Allgemeine Java-Themen 6
M statische Methode per reflection aufrufen Allgemeine Java-Themen 2
B Frage zu Reflection Allgemeine Java-Themen 3
V Reflection - Problem Allgemeine Java-Themen 3
clemson Reflection Interface Allgemeine Java-Themen 4
G mit reflection an die felder einer klasse rankommen Allgemeine Java-Themen 4
N Reflection: An Package einer .class-Datei kommen Allgemeine Java-Themen 2
N Reflection: Feststellen ob eine Klasse abstract ist Allgemeine Java-Themen 3
B Reflection Allgemeine Java-Themen 10
C Reflection und variable casten ! Allgemeine Java-Themen 10
C Reflection - Kurze Beschreibung? Allgemeine Java-Themen 3
F Frage zum Thema Reflection Allgemeine Java-Themen 13

Ähnliche Java Themen


Oben