2014-10-19 45 views
5

是否有一些注释可以让我告诉java编译器 变量不应该在注释之后使用?感谢 现代IDE的自动填充和复制粘贴功能,这很容易通过输入变量名称来引入 错误。这样的注释将有助于在编译时检测这些错误(或者在打字时,如果使用智能IDE,如netbeans/eclipse)。 作为一个例子,我有以下字符串处理管道:使用后禁用变量

String input = .... 
String pass1 = op1 (input); 
... 
String pass2 = op2 (pass1); 
... 
String pass3 = op3 (pass1); // typo: pass1 should be pass2 
... 
return pass3; 

如果我可以这样说disable pass1流向何方op2被称为行之后, 线路中错字,其中op3被称为将作为被检测pass1将作为假设的disable注释的结果超出范围。

+1

只是不要这样命名变量。或者重用这些变量。 – 2014-10-19 02:59:19

+0

你的例子中的'annotations'在哪里? – 2014-10-19 03:02:45

+0

'disable pass1'是我希望存在的注释。通用格式为“disable”,后跟一个范围内的变量名称。 – 2014-10-19 03:03:58

回答

3

不,您不能停用Java中的变量。作为替代,重复使用变量,而不是创建新的:

String input = .... 
String currentPass = op1 (input); 
... 
currentPass = op2 (currentPass); 
... 
currentPass = op3 (currentPass); 
... 
return currentPass; 

从理论上讲,一个足够聪明的IDE可以使用java annotations抛出一个警告。但是,这是一个坏主意。语法会很糟糕,并且会将您与特定的IDE绑定。另外,没有实现该“功能”的Java IDE。

+0

我不认为Java允许您注释语句... – 2014-10-19 03:15:39

+0

@StephenC Java8允许您注释类型转换例如'(@Deactivate String)pass1;'。 – Joshua 2014-10-19 03:18:38

+0

这有帮助吗? – 2014-10-19 03:20:13

2

您不能以您描述/期望的方式“停用”变量。但是,如果您恰当地设计了块结构,则可以安排某些变量超出范围;例如

String input = .... 
{ 
    String pass1 = op1 (input); 
    ... 
} 
String pass2 = op2 (pass1); // compilation error ... pass1 is out of scope. 

目前还不清楚这是否能给您足够的控制权以实现您真正想要做的事。但是,如果没有,那么我不认为这会在编译时工作,任何的替代品......


重用变量,通过@Joshua描述的是另一种方法。它避免了问题,而不是直接解决问题。

+0

使用块结构是我的第一个想法,在很多情况下它可能就足够了。但它不起作用,因为连续的块需要共享一个变量。 – 2014-10-19 03:13:56

+0

在这种情况下,你运气不好。 – 2014-10-19 03:14:48

+0

@Ahishek将共享变量放在外部作用域中,如本例中的'input'。 – EJP 2014-10-19 04:09:16