Ответ 1
Я не думаю, что это имеет какое-то особое значение. Это системная аннотация, связанная с JEP 161, в которой добавлены аддитивные "профили", так что вы можете запустить приложение в подмножестве JRE. Он добавляется программно, поэтому он не должен придерживаться правил грамматики.
Поиск в трекере ошибок OpenJDK для этого JEP обнаружил коммит, в который добавлена "синтетическая" аннотация.
Похоже, что прецедент уже был создан для sun.Proprietary+Annotation
и они просто следовали соглашению.
Я подозреваю, что причина, по которой аннотация Sun была названа таким образом, была утрачена из-за летописи - она предшествует Java 6, до того, как код стал открытым исходным кодом.
Я также нашел фиксацию для jdeps, где они анализируют эти аннотации, где они не придают никакого значения способу, которым они названы; они просто используют полное имя для обоих.
Вы также можете начать использовать недопустимые идентификаторы типов - не требуется карьера в Oracle!
final DynamicType.Unloaded<? extends Annotation> unloaded = new ByteBuddy()
.with(TypeValidation.DISABLED)
.makeAnnotation()
.name("jdk.Profile+Annotation")
.make();
final DynamicType.Loaded<? extends Annotation> loaded = unloaded.load(Test.class.getClassLoader());
final Class<? extends Annotation> myBadlyNamedAnnotation = loaded.getLoaded();
System.out.println(myBadlyNamedAnnotation);