2014-10-19 23 views
5

Czy jest jakaś adnotacja, która może pozwolić mi powiedzieć kompilatorowi java, że ​​zmienna nie powinna być używana po adnotacji? Dzięki funkcji autouzupełniania i kopiowania wklejów współczesnych IDE zbyt łatwo można wprowadzać błędy przez błędne nazwy zmiennych. Takie adnotacje pomogą wykryć niektóre z tych błędów podczas kompilacji (lub w czasie pisania, jeśli używasz inteligentnych IDE, takich jak netbeans/eclipse). Jako przykład mam następujące rurociąg przetwarzania ciąg:deaktywuj zmienną po użyciu

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

Gdybym mógł powiedzieć coś takiego disable pass1 tuż po wierszu, w którym op2 nazywa, typo w wierszu, w którym op3 nazywa zostanie wykryty jako pass1 byłby poza zakresem w wyniku hipotetycznej adnotacji disable.

+1

Po prostu nie oznaczaj zmiennych w ten sposób. Lub użyj ponownie zmiennych. –

+0

Gdzie są "adnotacje" w twoim przykładzie? –

+0

'disable pass1' to adnotacja, której pragnęłam. Ogólny format to 'disable', po którym następuje nazwa zmiennej, która jest w zakresie. –

Odpowiedz

3

Nie, nie można dezaktywować zmiennych w Javie. Jako alternatywę, ponowne użycie zmiennych, zamiast tworzyć nowe:

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

Teoretycznie wystarczająco inteligentny IDE przydałby java annotations rzucić ostrzeżenie. Jednak jest to zły pomysł. Składnia byłaby brzydka i wiązałaby cię z konkretnym IDE. Ponadto nie ma Java IDE, które implementują tę "funkcję".

+0

Nie wydaje mi się, żeby Java pozwalała na opisywanie instrukcji ... –

+0

@StephenC Java8 umożliwia opisywanie rzutów typów, np. '(@Deactivate String) pass1;'. – Joshua

+0

Czy to pomoże tutaj? –

2

Nie można "dezaktywować" zmiennych w sposób opisywany/pożądany.

Jeśli jednak odpowiednio zaprojektujesz strukturę bloku, możesz ustawić, że pewne zmienne są poza zakresem; na przykład

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

Nie jest jasne, czy daje to wystarczającą kontrolę, aby osiągnąć to, co naprawdę chcesz zrobić. Ale jeśli nie, to nie mogę myśleć o żadnych alternatywnych rozwiązań, które pracują w czasie kompilacji ...


Ponowne użycie zmiennych w sposób opisany przez @Joshua jest inne podejście. Pozwala uniknąć problemu, a nie bezpośrednio go rozwiązać.

+0

Używanie struktury blokowej było moją pierwszą myślą i może być wystarczające w wielu przypadkach. Ale to nie działa w moim, ponieważ kolejne bloki muszą współdzielić zmienną. –

+0

W takim przypadku nie masz szczęścia. –

+0

@Abhishek Umieść wspólną zmienną w zewnętrznym zasięgu, np. 'Input' w tym przykładzie. – EJP

Powiązane problemy