Comment mettre en point d'arrêt conditionnel dans la classe interne anonyme selon la variable locale finale?

StackOverflow https://stackoverflow.com/questions/4733572

Question

suppose que j'ai la classe suivante et que vous souhaitez définir un point d'arrêt conditionnel sur arg == null à l'endroit marqué. Cela ne fonctionnera pas dans Eclipse et donne l'erreur « point d'arrêt conditionnel a erreur de compilation (s) Raison:. Arg ne peut être résolu à une variable ».

J'ai trouvé quelques informations connexes , mais même si je change la condition de « val $ arg == null »(val $ arg est le nom de la variable affichée dans l'affichage des variables du débogueur), éclipse me donne la même erreur.

public abstract class Test {

    public static void main(String[] args) {
        Test t1 = foo("123");
        Test t2 = foo(null);
        t1.bar();
        t2.bar();
    }

    abstract void bar();

    static Test foo(final String arg) {
        return new Test() {
            @Override 
                void bar() {
                // I want to set a breakpoint here with the condition "arg==null"
                System.out.println(arg); 
            }
        };
    }
}
Était-ce utile?

La solution

Vous pouvez essayer de placer l'argument comme un champ dans la classe locale.

static Test foo(final String arg) {
    return new Test() {
        private final String localArg = arg;
        @Override 
            void bar() {
            // I want to set a breakpoint here with the condition "arg==null"
            System.out.println(localArg); 
        }
    };
}

Autres conseils

Je ne peux offrir une solution de contournement laid:

if (arg == null) {
     int foo = 0; // add breakpoint here
}
System.out.println(arg);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top