2014-10-19 3 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

Просто не называйте переменные таким образом. Или повторно используйте переменные. –

+0

Где в вашем примере находятся аннотации? –

+0

'disable pass1' - это аннотация, которого я хочу. Общий формат - 'disable', за которым следует имя переменной, которое находится в области видимости. –

ответ

3

Нет, вы не можете деактивировать переменные в Java. В качестве альтернативы, повторно использовать переменные, вместо того, чтобы создавать новые:

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

В теории, достаточно умный IDE может использовать java annotations бросить предупреждение. Однако это плохая идея. Синтаксис был бы уродливым и привязал бы вас к определенной среде IDE. Кроме того, нет Java IDE, которые реализуют эту функцию.

+0

И я не думаю, что Java позволяет комментировать заявления ... –

+0

@StephenC Java8 позволяет вам аннотировать типу. '(@Deactivate String) pass1;'. – Joshua

+0

Это поможет? –

2

Вы не можете «деактивировать» переменные так, как вы описываете/желаете.

Однако, если вы правильно сконструируете структуру блока, вы можете организовать, чтобы определенные переменные были вне сферы видимости; например

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

Непонятно, дает ли это вам достаточный контроль над тем, что вы действительно пытаетесь сделать. Но если нет, то я не могу думать о каких-либо альтернатив, которые будут работать во время компиляции ...


Повторное использование переменных, как описано @Joshua другой подход. Это позволяет избежать проблемы, а не решать ее напрямую.

+0

Использование структуры блока было моей первой мыслью, и этого может быть достаточно во многих случаях. Но это не работает в моей, потому что последовательные блоки должны совместно использовать переменную. –

+0

В таком случае вам не повезло. –

+0

@Abhishek Поместите общую переменную во внешнюю область, например 'input' в этом примере. – EJP

Смежные вопросы