Какое максимальное количество модификаторов может содержать метод java?
Есть несколько модификаторов, используемых перед объявлением метода Java, таких как public
, static
, synchronized
и т.п.
Я просто хочу знать максимальное количество модификаторов или все комбинации модификаторов, которые может содержать метод java.
2 ответа
См. Спецификацию языка Java, глава 8.4:
MethodDeclaration:
{MethodModifier} MethodHeader MethodBody
а также:
MethodModifier:
(one of)
Annotation public protected private
abstract static final synchronized native strictfp
Вы не можете смешивать:
- модификаторы доступа (так что вы получили один из этих 3, или ни один для защищенного пакета)
- абстрактный, статичный, окончательный
- абстрактный с (приватный, статический, финальный, нативный, строгий, синхронизированный)
- и наконец: родной и строгий
Взяв все это вместе (спасибо пользователю Andreas за отличную формулировку):
Используя синтаксис регулярных выражений, мы получаем:
[ public | protected | private] static final synchronized [native | strictfp]
Итак, максимальное количество 5; и 6 различных комбинаций этих 5 ключевых слов.
Согласно спецификации Java, §8.4.3. Модификаторы метода, общий список модификаций (не считая аннотаций):
public protected private abstract static final synchronized native strictfp
public
, protected
, а также private
взаимоисключающие, думал, что этот раздел не говорит этого.
В спецификации также сказано:
Это ошибка времени компиляции, если объявление метода, содержащее ключевое слово
abstract
также содержит любое из ключевых словprivate
,static
,final
,native
,strictfp
, или жеsynchronized
,
Так что, если вы включите abstract
это только оставляет public | protected
так максимум 2.
Следующее правило в спецификации гласит:
Это ошибка времени компиляции, если объявление метода, содержащее ключевое слово
native
также содержитstrictfp
,
Итак, это означает, что без abstract
Вы можете смешать следующим образом:
public | protected | private
static
final
synchronized
native | strictfp
Максимальная длина 5, и есть 3 * 2 = 6 комбинаций с этой длиной.