Cómo establecer punto de interrupción condicional en clase interna anónima en función de la variable local final?

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

Pregunta

supongamos que tengo la siguiente clase y quiero establecer un punto de interrupción condicionada a arg == null en el lugar marcado. Esto no funcionará en Eclipse y da el error "punto de interrupción condicional tiene error de compilación (s) Motivo:. Arg no se puede resolver a una variable".

He encontrado alguna información relacionada aquí , pero incluso si cambio de la condición de "$ val arg == null"(val $ arg es el nombre de la variable representada en vista de variables del depurador), eclipse me da el mismo error.

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); 
            }
        };
    }
}
¿Fue útil?

Solución

You could try placing the argument as a field in the local class.

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); 
        }
    };
}

Otros consejos

I can only offer an ugly workaround:

if (arg == null) {
     int foo = 0; // add breakpoint here
}
System.out.println(arg);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top