IntelliJ没有注意到接口的变化?

时间:2010-05-04 14:40:23

标签: java intellij-idea

[我决定再给IntelliJ(替换Eclipse),因为它的Groovy支持应该是最好的。但回到Java ......]

我有一个定义常量

的接口
public static final int CHANNEL_IN = 1;

我的模块中有大约20个实现该接口的类。我已经确定这个常量是一个坏主意所以我做了我在Eclipse中做的事情:我删除了整行。这应该使Project树像圣诞树一样点亮,并且所有实现该接口的类都使用该常量来中断。相反,这不会发生。如果我实际上没有双击相关的类 - 我发现使用grep - 模块甚至可以正确构建(使用Build - > Make Module)。如果我双击相关的类,则会在“项目树”和“编辑器”中显示错误。

我无法在小型测试中复制此行为,但在大型模块中,它以这种方式(错误地)工作。 IntelliJ中是否有相关设置?

1 个答案:

答案 0 :(得分:2)

您所拥有的是标准Java问题与标准IDEA行为之间的交互。像这样的常量表达式在类编译中被内联(根据Java语言规范),所以实际上引用这个常量的类并没有因为你删除了行(显然)而没有改变,并且常量和因为它被内联所以已经上课了。这会导致编译失败(如果这是唯一的更改,那么该类在运行时也不会失败 - 它只会在您执行干净构建时失败)。

IDEA的另一种方法是在进行此类更改时执行Build-> Rebuild Project。另一个是在Settings-> Compiler中有一个Honor Dependencies on "Compile" command。这可能会对大型项目的性能产生负面影响(因此默认情况下会禁用),但应该可以解决这类问题。

此问题的另一部分是IDEA不会自动重新计算对此类更改的所有检查。它会在您打开文件时重新计算。我不知道让IDEA这样做的设置。当你重建任何问题时,会突出显示(直到编译器放弃的位置),但是在你打开课程或重新编译之前,突出显示不会消失。