Есть ли какая-либо польза от частной константы, которая не является статичной? - PullRequest
2 голосов
/ 14 октября 2010

Есть ли причина иметь частную константу, которая не является статичной? Есть ли ситуации, когда вам понадобится нестатический закрытый const? Будет ли иметь смысл, если константы, где статические по умолчанию?

Я использую ActionScript3 и немного Java, но я думаю, что это более широкий вопрос ООП.

Ответы [ 3 ]

1 голос
/ 14 октября 2010

Другая причина, кроме доступа к переменной в анонимном классе (как сказал Тило), заключается в том, что если вам нужен объект, назначение которого вы не можете изменить, но он поддерживает некоторое состояние текущего объекта, и, таким образом, вы можете не делить его среди нескольких экземпляров класса.

1 голос
/ 14 октября 2010

C # имеет такую ​​концепцию поля только для чтения , то есть поля, которые могут быть назначены только в конструкторе и не могут быть изменены любым другим методом. Они похожи на константы для конкретного экземпляра класса (вне его конструктора), а не для самого класса.

1 голос
/ 14 октября 2010

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

 void test(){
      final long startTime = System.currentTimeMillis();   // needs to be final
      new Runnable(){
          System.out.println(startTime);
      }.run();
 }

Кроме того, вы можете сделать поля и переменные окончательными, чтобы защитить себя от случайного переназначения их (и компилятор и среда выполнения также могут использовать эту информацию для оптимизации производительности).

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

...