首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IntelliJ IDEA调试enter方法多次

IntelliJ IDEA调试enter方法多次
EN

Stack Overflow用户
提问于 2017-03-23 09:43:25
回答 1查看 1.5K关注 0票数 2

调试下列代码时:

代码语言:javascript
复制
public class MyProxy {
    public static void main(String[] args){

        Consumer f = (Consumer) Proxy.newProxyInstance(
                Consumer.class.getClassLoader(),
                new Class[] { Consumer.class },
                new Handler(new ConsumerImpl())
        );

        f.consume("Hello");   // set breakpoint here
        System.out.println("done");
    }
}

interface Consumer {
    void consume(String s);
}

class ConsumerImpl implements Consumer {
    public void consume(String s) {
        System.out.println(s);
    }
}

class Handler implements InvocationHandler {
    private final Consumer original;
    public Handler(Consumer original) {
        this.original = original;
    }
    @Override
    public Object invoke(Object proxy, Method method, Object[] args)
            throws IllegalAccessException, IllegalArgumentException,
            InvocationTargetException {
        System.out.println("BEFORE");
        method.invoke(original, args);
        System.out.println("AFTER");
        return null;
    }
}

产出如下:

代码语言:javascript
复制
BEFORE
AFTER
BEFORE
AFTER
BEFORE
BEFORE
AFTER
Hello
BEFORE
AFTER
AFTER
BEFORE
AFTER
BEFORE
AFTER
BEFORE
AFTER
BEFORE
AFTER
done
BEFORE
AFTER

当调试器在断点行处暂停时,输出已经有两行,当我进入invoke方法时,输出如下所示。这就像调试器在我做的每一步都进入invoke方法一样。因为如果我不进入该方法,输出是:

代码语言:javascript
复制
BEFORE
AFTER
BEFORE
Hello
AFTER
BEFORE
AFTER
done
BEFORE
AFTER

如果我运行代码,输出将如预期的那样。

代码语言:javascript
复制
BEFORE
Hello
AFTER
done

是调试器的错误还是我做错了什么?

环境: Windows 64,Intellij IDEA,JDK8

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-23 10:34:12

这不是思想上的错误。如果您尝试在没有任何断点的情况下调试它,您可能会得到与您预期相同的结果。但是,如果您放置了一些断点,IDEA将尝试调用toString()方法,然后调用它可以计算的变量的hashCode()方法。

最终,对于所有方法,它将调用您的InvocationHandler实现(不仅对于“消费”方法,您可以在调用处理程序实现中打印method.getName()以确保这一点)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42972312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档