2017-01-16 3 views
1

Возможно ли это - с помощью коммутатора компилятора или обычного инструмента (который я не знаю) - разбить компиляцию, если переменная переназначена, если она не помечена как mutable keyword (которого нет в Java еще)?Заставить компилятор Java предположить, что все переменные являются окончательными

Пример:

Contract a; // compile error 
Contract b = getContract(id); // ok 
b.doSomething(); // ok 
b = getContract(otherId); // compile error 
mutable int i = 1; 
i++; // ok 

Я знаю, что есть языки, как это, но, будучи вынужден кодом Java в компании, с использованием такого инструмента является единственным выбором.

Привет, JG.

+1

У ошибки Google есть проверка на это: http://errorprone.info/bugpattern/Var. –

ответ

1

Нет, вы не можете заставить компилятор Java сделать это. И вы не можете поместить не-Java-ключевые слова (например, mutable) в исходный код Java. Никакой совместимый Java-компилятор не позволит ни одного из них.

Возможно, вы можете использовать пользовательскую аннотацию для «объявления» изменчивых локальных переменных и использовать статический анализатор для обнаружения назначений местным пользователям без аннотации.

Возможно, даже существуют существующие инструменты анализатора, аннотации и т. Д., Которые сделают это для вас, хотя я не знаю о инструменте, который точно соответствует счету.

(FinalLocalVariable Проверка CheckStyle не делает именно то, что вы хотите. Он расскажет вам, где добавить final в объявления, но это не то, о чем вы просите ... Я думаю. быть лечение в final, даже если они не объявлены явно как таковой.)


Но на мой взгляд, было бы неплохо, чтобы сделать это.

Ваш работодатель принял решение (правильно или неправильно), что Java - это единственный язык, который вы можете использовать. Одной из причин этого будет обеспечение того, чтобы разрабатываемый вами код мог поддерживаться и расширяться Java-программистами. Используя необычные обозначения, чтобы вы могли писать код с нулевым присвоением, вы подрываете политику компании.

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

2

Посмотрите на CheckStyle инструмент для анализа статического кода. Вы также можете интегрировать его в свою среду IDE. FinalLocalVariable проверка выглядит ваш случай:

Проверяет, что локальные переменные, которые никогда не их значения Изменились объявлены окончательными. Проверка может быть настроена так же, чтобы проверить, что неизменные параметры объявлены окончательными.

Также есть PMD анализатор исходного кода. Но я никогда не использовал его, поэтому ничего не могу предложить.