附:
Object method(){
...
return /* some complex expression */
}
Run Code Online (Sandbox Code Playgroud)
有没有办法可以看到调试时会返回什么值?就像以某种方式设置一个断点,在返回后立即命中,但在执行之前转到调用代码?我希望能够知道返回值是什么,并且还能够看到所有局部变量的值.
我现在这样做的方法是制作一个临时变量:Object ret = /* something complex */; return ret;.但这很麻烦,并且还增加了额外的不必要的代码行.
注意:这是同一个问题,我可以在Visual Studio中调试时返回返回值,但是对于intellij.
在行运行之后和指令指针返回调用函数之前,是否可以看到方法的返回值?
我正在调试我无法修改的代码(读取:不想重新编译第三方库),有时它跳转到我没有源代码的代码或者返回表达式有副作用阻止我能够在显示选项卡中运行表达式.
通常返回值在复合语句中使用,因此Variables视图永远不会向我显示该值(因此希望在控制返回到调用函数之前查看结果).
更新:我不能使用表达式查看器,因为语句中有副作用.
我开始与Sonar一起冒险;)
具有默认配置的声纳在主要级别上设置了PMD UnnecessaryLocalBeforeReturn错误.
List<Todo> filtered = em.createQuery(query).getResultList();
return filtered;
Run Code Online (Sandbox Code Playgroud)
对我来说,我应该在一行中更改上面的代码.
这对我来说真的很有意思,因为我建议我的同事在返回之前将这个"不必要的"本地化.
我觉得它很容易调试.当我在返回线上设置断点时,我确信当我到达那里时,这个值将准备就绪,我不必对我的陈述进行选择或"逐步表达".
除此之外,我相信它对减少方法的回报点有积极的影响.
我的问题是:是否存在某种解释/讨论,为什么来自Checkstyle,PMD,FindBugs等项目的错误被认为是错误?
我已经给出了不在return语句中使用变量的注释,而是直接在返回statemnet中使用条件下面的代码中第3行和第4行之间是否有任何区别.
String str = "Hello Sir";
boolean flag = str.contains("Hello");
return(flag);
// instead ask to use below
return(str.contains("Hello"));
Run Code Online (Sandbox Code Playgroud)
我更喜欢使用变量,因为在复杂的计算中,这些有助于调试