Reflexionen IllegalArgumentException Ursachen

UPDATE - Um die Frage klarer.

Was ist die mögliche Ursache dafür, dass eine classcastexception-Fehler beim Aufruf einer Methode mit Reflexionen?

Habe ich die folgenden stacktrace als Teil meiner Anwendung beim Versuch, eine Methode aufzurufen, die über Reflexionen.

java.lang.IllegalArgumentException: java.lang.ClassCastException@21fea1fv
    at sun.reflect.GeneratedMethodAccessor332.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com..... 
    (remaining is my method stack trace)

Ich habe versucht, ein Beispiel der Klasse und übergeben die verschiedenen Argumente der verschiedenen Arten, aber ich bekomme immer eine diese Ausnahme.

java.lang.IllegalArgumentException: argument type mismatch
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)

UPDATE -
Hier ist der Beispiel-code, den ich schrieb, um zu versuchen, die Neuerstellung der Ausnahme

Schnittstelle zum erstellen von proxy-Klasse

package my.tests;

public interface ReflectionsInterface { 
    public abstract void doSomething();
}

Dies ist der test-Klasse

package my.tests;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class Reflections implements ReflectionsInterface {

    public static void main(String[] args) {
        Reflections reflections = new Reflections();
        ReflectionsInterface reflectionsProxy = reflections.createProxy(ReflectionsInterface.class);
        invokeMethod(reflectionsProxy, "doSomething", null);
    }

    public <T> T createProxy(Class<T> entityInterface) {
        EntityInvocationHandler eih = new EntityInvocationHandler(this);
        T cast = entityInterface.cast(Proxy.newProxyInstance(
                entityInterface.getClassLoader(), new Class[]{entityInterface}, eih));
        return cast;
    }

    public static void invokeMethod(Object obj, String methodName, Object... args) {
        Method[] methods = obj.getClass().getMethods();
        try {
            for (Method method : methods) {
                if (method.getName().equals(methodName)) {
                    method.invoke(obj, args);
                    break;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void doSomething() {
        System.out.println("woo");
    }

    private final static class EntityInvocationHandler implements InvocationHandler,
            ReflectionsInterface {

        private Reflections reflectionObj;

        public EntityInvocationHandler(Reflections reflectionObj) {
            super();
            this.reflectionObj = reflectionObj;
        }

        @Override
        public void doSomething() {
            reflectionObj.doSomething();
        }

        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            Object invoke = method.invoke(this, args);
            return invoke;
        }

    }
}

Ich bin nicht in der Lage zu verstehen, die, wenn ich Sie bekommen würde argument type mismatch und die classcastexception-Fehler verursacht werden würde.
Ich bin nicht in der Lage, neu zu erstellen die Ausnahme und würde gerne wissen, warum es kommt. Jeder beliebige code, der neu erstellt wird, oder eine source code-Referenz werfen dieser Ausnahme in diesem Fall wird gut sein,

Ich habe gegangen durch den Method.class javadocs und source-code, ich bin nicht in der Lage, herauszufinden, warum dieser Fehler kommt.

  • Die letzten änderungen, die Sie gemacht, um Ihren code beseitigt haben, die Ausnahme wurde geworfen. Sagen Sie, Sie sind noch immer Fehler, auch mit dieser neuen SSCCE? Wenn nicht, bitte wieder zurück zu den vorherigen code, der eigentlich zeigt das Problem, das Sie haben.
  • Der Fehler aus meinem code der Anwendung, die sehr aufwendig und ich kann nicht hier posten. Dies ist mein (gescheiterter) Versuch, neu zu erstellen oder der Fehler verstehen, warum es kommt..
InformationsquelleAutor Aditya | 2013-04-16
Schreibe einen Kommentar