2017-12-10 6 views
-1

Ich erhalte folgende Fehlermeldung:Ich erhalte java.lang.IllegalArgumentException

java.lang.IllegalArgumentException: None of [static java.lang.String com.runtime.MyInterceptor.intercept()] allows for delegation from public java.lang.String java.lang.Object.toString()

Ich weiß nicht, welche Fehler ich mache.

public void interceptMethod() throws InstantiationException, IllegalAccessException { 
    Class<?> dynamicType = new ByteBuddy().subclass(Object.class) 
      .method(ElementMatchers.named("toString")) 
      .intercept(MethodDelegation 
      .to(MyInterceptor.class)) 
      .make() 
      .load(getClass().getClassLoader(), ClassLoadingStrategy.Default.WRAPPER) 
      .getLoaded(); 

    if (dynamicType.newInstance().toString().equals("intercept")) { 
     System.out.println("method intercept() is intercepted by byteBuddy"); 
    } else { 
     System.out.println("Failed to intercept the method toString()"); 
    } 

} 

class MyInterceptor { 
    static String intercept() { 
     return "intercept"; 
    } 
} 

Antwort

1

die Öffentlichkeit Interceptor Methode Fabrikat:

public class MyInterceptor { 
    public static String intercept() { 
     return "intercept"; 
    } 
} 
+0

noch bin ich das gleiche Problem – Tirumalesh

+0

mit Blick auf das seltsame ist, wird Ihr Code funktioniert, wenn ich es mit dieser Änderung geführt. Ist MyInterceptor eine geschachtelte Klasse? Vielleicht versuchen Sie, es öffentlich oder öffentlich zu machen, wenn es sich um eine Top-Level-Klasse handelt. – kaos

+0

Hi Kaos, ich machte MyInterceptor als publicand es funktioniert. vielen dank für dich :) – Tirumalesh

Verwandte Themen