2017-10-16 30 views
0

J'essaie de comprendre comment utiliser efficacement MethodHandles, une chose qui me désole est d'essayer d'exécuter MethodHandles pendant le débogage. Voici un exemple de code qui illustre mon problème.MethodHandle invoke pendant le débogage

public class MetricianTest { 

    public static void main(String[] args) throws Throwable { 
     final MethodHandles.Lookup lookup = MethodHandles.lookup(); 
     final MethodType mt = MethodType.methodType(String.class); 
     final MethodHandle mh = lookup.findVirtual(MHTestClass.class, "testMethod", mt); 
     System.out.println(mh.invoke(new MHTestClass())); 
    } 


    public static class MHTestClass { 
     public int testField = 1; 

     public MHTestClass() { 

     } 

     public String testMethod() { 
      return "method-value"; 
     } 
    } 
} 

Le code fonctionne normalement lors de l'exécution, mais arrêter le débogueur IntelliJ et tenter d'invoquer le MethodHandle jette un UnsupportedOperationException. En regardant les Javadocs, je peux voir que les MethodHandles ne peuvent pas être invoqués de manière réfléchie, mais je ne suis pas sûr de comprendre pourquoi, ni comment faire pour déboguer les invocations de MethodHandle dans mon programme. Toute idée serait grandement apprécié!

Répondre

0

Ceci n'est pas encore corrigé IDEA-154967, désolé. Contournement consiste à utiliser invokeWithArguments.

+0

Génial! Merci pour la réponse rapide! – nickrobison