Почему аннотация java может содержать поле или даже класс? - PullRequest
0 голосов
/ 08 февраля 2020

Что такое использование полей или классов внутри аннотаций?

public @interface Test {
    public String val = "hello"; // WHY??

    public static class MyClass {// WHY??
        public static void main(String[] args) {
            System.out.println(val);
        }
    }

    String value();
}

1 Ответ

2 голосов
/ 08 февраля 2020

Поля: потому что вы можете определить поля в любом интерфейсе. Они всегда неявно публикуются c, stati c и final: другими словами, для определения констант в пространстве имен интерфейса.

Ответ по существу одинаков для классов: это публичный c, stati c (но не окончательный) класс. это просто пространство имен, в котором можно определить класс.


Чтобы перевернуть вопрос: почему не должно вы можете сделать это?

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

String String = "String"; String: break String;

допустимо, но бесполезно и сбивает с толку. Здесь есть 3 различных значения String, 4, если считать литерал. Это гораздо менее полезно, чем элементы аннотаций, но также допускается.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...