Releases: Bloogefest/BF.Annotation
3.0.0
Этот выпуск несовместим с предыдущим — все аннотации были переработаны, а некоторые даже удалены. Например, аннотация
Removal
была удалена и заменена новым параметромObsolete::to()
в уже существующей аннотацииObsolete
. Аннотации:Enumed
,Magical
,Nls
,NotNls
— показались довольно бесполезными, поэтому тоже были удалены.Подробнее об изменениях: 2.1.0...3.0.0
Maven
<repository>
<id>central</id>
<url>https://repo1.maven.org/maven2</url>
</repository>
<dependency>
<groupId>com.bloogefest</groupId>
<artifactId>annotation</artifactId>
<version>3.0.0</version>
</dependency>
Gradle
mavenCentral()
implementation("com.bloogefest:annotation:3.0.0")
Введено:
Аннотации:
Возвращает тип влияния на окружение метода или конструктора.
API Note: Этот параметр был введён в выпуск-кандидате 3.0.0-RC1, после чего планируется допускать лишь небольшие изменения в его документации.
Implementation Requirements: Реализация этого параметра по умолчанию является эталонной, так как она полностью следует спецификации.
Implementation Note: Для того чтобы применение этого параметра было максимально эффективно, следуйте рекомендациям по применению.
public final class Singleton {
private static volatile @Nullable Singleton defaultInstance;
private Singleton() {}
@Contract(value = "-> !null", impact = Contract.Impact.INTERNAL)
public static @NonNull Singleton defaultInstance() {
if (defaultInstance == null) synchronized (Singleton.class) {
if (defaultInstance == null) defaultInstance = new Singleton();
}
return defaultInstance;
}
}
Типы влияния на окружение.
API Note: Это перечисление было введено в выпуск-кандидате 3.0.0-RC1, после чего планируется допускать лишь небольшие изменения в его документации.
Implementation Requirements: Реализация этого перечисления по умолчанию является эталонной, так как она полностью следует спецификации.
Implementation Note: Для того чтобы применение этого перечисления было максимально эффективно, следуйте рекомендациям по применению.
public final class Singleton {
private static volatile @Nullable Singleton defaultInstance;
private Singleton() {}
@Contract(value = "-> !null", impact = Contract.Impact.INTERNAL)
public static @NonNull Singleton defaultInstance() {
if (defaultInstance == null) synchronized (Singleton.class) {
if (defaultInstance == null) defaultInstance = new Singleton();
}
return defaultInstance;
}
}
Отсутствие влияния на окружение.
API Note: Это значение было введено в выпуск-кандидате 3.0.0-RC1, после чего планируется допускать лишь небольшие изменения в его документации.
Implementation Note: Для того чтобы применение этого значения было максимально эффективно, следуйте рекомендациям по применению.
public final class Holder<T> {
private final @Nullable T object;
public Holder(final @Nullable T object) {
this.object = object;
}
@Contract(value = "-> ~", impact = Contract.Impact.NONE)
public @Nullable T object() {
return object;
}
}
Влияние на внутреннее и внешнее окружение.
API Note: Это значение было введено в выпуск-кандидате 3.0.0-RC1, после чего планируется допускать лишь небольшие изменения в его документации.
Implementation Note: Для того чтобы применение этого значения было максимально эффективно, следуйте рекомендациям по применению.
public final class Listener {
private volatile boolean listened;
public Listener() {}
@Contract(value = "-> ~", impact = Contract.Impact.SHARED)
public void listen() {
if (!listened) synchronized (this) {
if (!listened) {
listened = true;
return;
}
}
System.exit(0);
}
@Contract(value = "-> ~", impact = Contract.Impact.NONE)
public boolean listened() {
return listened;
}
}
Влияние на внутреннее окружение.
API Note: Это значение было введено в выпуск-кандидате 3.0.0-RC1, после чего планируется допускать лишь небольшие изменения в его документации.
Implementation Note: Для того чтобы применение этого значения было максимально эффективно, следуйте рекомендациям по применению.
public final class Singleton {
private static volatile @Nullable Singleton defaultInstance;
private Singleton() {}
@Contract(value = "-> !null", impact = Contract.Impact.INTERNAL)
public static @NonNull Singleton defaultInstance() {
if (defaultInstance == null) synchronized (Singleton.class) {
if (defaultInstance == null) defaultInstance = new Singleton();
}
return defaultInstance;
}
}
Влияние на внешнее окружение.
API Note: Это значение было введено в выпуск-кандидате 3.0.0-RC1, после чего планируется допускать лишь небольшие изменения в его документации.
Implementation Note: Для того чтобы применение этого значения было максимально эффективно, следуйте рекомендациям по применению.
public final class Listener {
public Listener() {}
@Contract(value = "-> ~", impact = Contract.Impact.EXTERNAL)
public void listen() {
System.exit(0);
}
}
Неопределённое влияние на окружение.
API Note: Это значение было введено в выпуск-кандидате 3.0.0-RC1, после чего планируется допускать лишь небольшие изменения в его документации.
Implementation Note: Для того чтобы применение этого значения было максимально эффективно, следуйте рекомендациям по применению.
@FunctionalInterface
public interface Listener {
@Contract(value = "-> ?", impact = Contract.Impact.UNDEFINED)
void listen();
}
Возвращает идентификатор выпуска, выпуск-кандидата или снимка, в котором состояние элемента было обозначено как экспериментальное.
API Note: Этот параметр был введён в выпуск-кандидате 3.0.0-RC1, после чего планируется допускать лишь небольшие изменения в его документации.
Implementation Requirements: Реализация этого параметра по умолчанию является эталонной, так как она полностью следует спецификации.
Implementation Note: Для того чтобы применение этого параметра было максимально эффективно, следуйте рекомендациям по применению.
@Experimental(from = "3.7.4-RC1", to = "3.7.4-RC2")
@FunctionalInterface
public interface Worker {
@Experimental(from = "3.7.4-RC2", to = "3.7.4-RC3")
@Contract("-> ?")
void work();
}
Возвращает идентификато...
3.0.0-RC2
Этот предварительный выпуск совместим с предыдущим предварительным.
Подробнее о релизе: 3.0.0-RC1...3.0.0-RC2
Maven
<repository>
<id>ossrh-rc</id>
<url>https://s01.oss.sonatype.org/content/repositories/releases/</url>
</repository>
<dependency>
<groupId>com.bloogefest</groupId>
<artifactId>annotation</artifactId>
<version>3.0.0-RC2</version>
</dependency>
Gradle
maven("https://s01.oss.sonatype.org/content/repositories/releases/")
implementation("com.bloogefest:annotation:3.0.0-RC2")
Изменено:
Аннотации:
Исправлена документация.
Исправлена документация.
Исправлена документация.
Исправлена документация.
Исправлена документация.
Исправлена документация.
Исправлена документация.
Исправлена документация.
Исправлена документация.
Исправлена документация.
Исправлена документация.
3.0.0-RC1
Этот предварительный выпуск несовместим с предыдущим стабильным.
Подробнее о релизе: 2.1.0...3.0.0-RC1
Maven
<repository>
<id>ossrh-rc</id>
<url>https://s01.oss.sonatype.org/content/repositories/releases/</url>
</repository>
<dependency>
<groupId>com.bloogefest</groupId>
<artifactId>annotation</artifactId>
<version>3.0.0-RC1</version>
</dependency>
Gradle
maven("https://s01.oss.sonatype.org/content/repositories/releases/")
implementation("com.bloogefest:annotation:3.0.0-RC1")
Введено:
Аннотации:
Возвращает тип влияния на окружение метода или конструктора.
API Note: Этот параметр был введён в выпуск-кандидате 3.0.0-RC1, после чего планируется допускать лишь небольшие изменения в его документации.
Implementation Requirements: Реализация этого параметра по умолчанию является эталонной, так как она полностью следует спецификации.
Implementation Note: Для того чтобы применение этого параметра было максимально эффективно, следуйте рекомендациям по применению.
public final class Singleton {
private static volatile @Nullable Singleton defaultInstance;
private Singleton() {}
@Contract(value = "-> !null", impact = Contract.Impact.INTERNAL)
public static @NonNull Singleton defaultInstance() {
if (defaultInstance == null) synchronized (Singleton.class) {
if (defaultInstance == null) defaultInstance = new Singleton();
}
return defaultInstance;
}
}
Типы влияния на окружение.
API Note: Это перечисление было введено в выпуск-кандидате 3.0.0-RC1, после чего планируется допускать лишь небольшие изменения в его документации.
Implementation Requirements: Реализация этого перечисления по умолчанию является эталонной, так как она полностью следует спецификации.
Implementation Note: Для того чтобы применение этого перечисления было максимально эффективно, следуйте рекомендациям по применению.
public final class Singleton {
private static volatile @Nullable Singleton defaultInstance;
private Singleton() {}
@Contract(value = "-> !null", impact = Contract.Impact.INTERNAL)
public static @NonNull Singleton defaultInstance() {
if (defaultInstance == null) synchronized (Singleton.class) {
if (defaultInstance == null) defaultInstance = new Singleton();
}
return defaultInstance;
}
}
Отсутствие влияния на окружение.
API Note: Это значение было введено в выпуск-кандидате 3.0.0-RC1, после чего планируется допускать лишь небольшие изменения в его документации.
Implementation Note: Для того чтобы применение этого значения было максимально эффективно, следуйте рекомендациям по применению.
public final class Holder<T> {
private final @Nullable T object;
public Holder(final @Nullable T object) {
this.object = object;
}
@Contract(value = "-> ~", impact = Contract.Impact.NONE)
public @Nullable T object() {
return object;
}
}
Влияние на внутреннее и внешнее окружение.
API Note: Это значение было введено в выпуск-кандидате 3.0.0-RC1, после чего планируется допускать лишь небольшие изменения в его документации.
Implementation Note: Для того чтобы применение этого значения было максимально эффективно, следуйте рекомендациям по применению.
public final class Listener {
private volatile boolean listened;
public Listener() {}
@Contract(value = "-> ~", impact = Contract.Impact.SHARED)
public void listen() {
if (!listened) synchronized (this) {
if (!listened) {
listened = true;
return;
}
}
System.exit(0);
}
@Contract(value = "-> ~", impact = Contract.Impact.NONE)
public boolean listened() {
return listened;
}
}
Влияние на внутреннее окружение.
API Note: Это значение было введено в выпуск-кандидате 3.0.0-RC1, после чего планируется допускать лишь небольшие изменения в его документации.
Implementation Note: Для того чтобы применение этого значения было максимально эффективно, следуйте рекомендациям по применению.
public final class Singleton {
private static volatile @Nullable Singleton defaultInstance;
private Singleton() {}
@Contract(value = "-> !null", impact = Contract.Impact.INTERNAL)
public static @NonNull Singleton defaultInstance() {
if (defaultInstance == null) synchronized (Singleton.class) {
if (defaultInstance == null) defaultInstance = new Singleton();
}
return defaultInstance;
}
}
Влияние на внешнее окружение.
API Note: Это значение было введено в выпуск-кандидате 3.0.0-RC1, после чего планируется допускать лишь небольшие изменения в его документации.
Implementation Note: Для того чтобы применение этого значения было максимально эффективно, следуйте рекомендациям по применению.
public final class Listener {
public Listener() {}
@Contract(value = "-> ~", impact = Contract.Impact.EXTERNAL)
public void listen() {
System.exit(0);
}
}
Неопределённое влияние на окружение.
API Note: Это значение было введено в выпуск-кандидате 3.0.0-RC1, после чего планируется допускать лишь небольшие изменения в его документации.
Implementation Note: Для того чтобы применение этого значения было максимально эффективно, следуйте рекомендациям по применению.
@FunctionalInterface
public interface Listener {
@Contract(value = "-> ?", impact = Contract.Impact.UNDEFINED)
void listen();
}
Возвращает идентификатор выпуска, выпуск-кандидата или снимка, в котором состояние элемента было обозначено как экспериментальное.
API Note: Этот параметр был введён в выпуск-кандидате 3.0.0-RC1, после чего планируется допускать лишь небольшие изменения в его документации.
Implementation Requirements: Реализация этого параметра по умолчанию является эталонной, так как она полностью следует спецификации.
Implementation Note: Для того чтобы применение этого параметра было максимально эффективно, следуйте рекомендациям по применению.
@Experimental(from = "3.7.4-RC1", to = "3.7.4-RC2")
@FunctionalInterface
public interface Worker {
@Experimental(from = "3.7.4-RC2", to = "3.7.4-RC3")
@Contract("-> ?")
void work();
}
Возвращает идентификатор выпуска, выпуск-кандидата или снимка, в котором планируется, что состояние элемента перестанет быть обозначенным как экспериментальное.
API Note: Этот параметр был введён в выпуск-кандидате 3.0.0-RC1, после чего планируется допускать лишь небольшие изменения в его документации.
Implementation Requirements: Реализация этого параметра по умолчанию является эталонной, так как она полностью следует спецификации.
Implementation Note: Для того чтобы применение этого параметра было максимально эффективно, следуйте рекомендациям по применению.
@Experimental(from = "3.7.4-RC1", to = "3.7.4-RC2")
@FunctionalInterface
public interface Worker {
@Experimental(from = "3.7.4-RC2", to = "3.7.4-RC3")
@Contract("-> ?")
void work();
}
- [`Obsolete::fro...
2.1.0
Этот стабильный выпуск совместим с предыдущим.
Подробнее о релизе: 2.0.0...2.1.0
Maven
<repository>
<id>central</id>
<name>Maven Central</name>
<url>https://repo1.maven.org/maven2</url>
</repository>
<dependency>
<groupId>com.bloogefest</groupId>
<artifactId>annotation</artifactId>
<version>2.1.0</version>
</dependency>
Gradle
repositories {
mavenCentral()
}
dependencies {
implementation("com.bloogefest:annotation:2.1.0")
}
Введено:
Аннотации:
Перечисление значений.
API Note: Уведомляет о предполагаемых значениях.
boolean toBoolean(final @Enumed({0, 1}) int value) {
return value == 0 ? false : true;
}
Возвращает предполагаемые значения.
Returns: Предполагаемые значения.
Implementation Requirements: Предполагаемые значения не должны повторяться.
boolean toBoolean(final @Enumed({0, 1}) int value) {
return value == 0 ? false : true;
}
Возвращает идентификатор выпуска, в котором ожидается, что состояние чего-то будет изменено.
Returns: Идентификатор выпуска, в котором ожидается, что состояние чего-то будет изменено.
@Experimental("3.7.4-RC1")
void work() {
System.gc();
}
Магическое значение.
API Note: Уведомляет о магическом значении, содержащимся в поле или локальной переменной.
void operate(final @Magical int code) {
final @Magical var limit = 256;
if (code > limit) System.gc();
}
Диапазон числовых значений.
API Note: Позволяет задать диапазон числовых значений.
void operate(final @Range(from = 0, to = 256) int code) {
if (code == 0) System.gc();
}
Изменено:
Аннотации:
Изменена документация.
Изменена документация — я добавил описание синтаксиса.
Изменена сигнатура.
Изменена документация.
Изменена сигнатура.
Изменена документация.
Изменена документация.
Изменено тело.
Изменена документация.
Изменено тело.
Изменена документация.
Изменено тело.
Изменена документация.
Изменено тело.
Изменена документация.
Изменено тело.
Изменена документация.
Изменена документация.
Изменена сигнатура.
Изменена документация.
Изменена документация.
Изменена сигнатура.
Другое:
Изменена документация.
Изменена документация.
2.1.0-RC1
Этот предварительный выпуск совместим с предыдущим стабильным.
Подробнее о релизе: 2.0.0...2.1.0-RC1
Maven
<repository>
<id>ossrh-rc</id>
<name>OSSRH RC</name>
<url>https://s01.oss.sonatype.org/content/repositories/releases/</url>
</repository>
<dependency>
<groupId>com.bloogefest</groupId>
<artifactId>annotation</artifactId>
<version>2.1.0-RC1</version>
</dependency>
Gradle
repositories {
maven {
name = "OSSRH RC"
url = uri("https://s01.oss.sonatype.org/content/repositories/releases/")
}
}
dependencies {
implementation("com.bloogefest:annotation:2.1.0-RC1")
}
Введено:
Аннотации:
Перечисление значений.
API Note: Уведомляет о предполагаемых значениях.
boolean toBoolean(final @Enumed({0, 1}) int value) {
return value == 0 ? false : true;
}
Возвращает предполагаемые значения.
Returns: Предполагаемые значения.
Implementation Requirements: Предполагаемые значения не должны повторяться.
boolean toBoolean(final @Enumed({0, 1}) int value) {
return value == 0 ? false : true;
}
Возвращает идентификатор выпуска, в котором ожидается, что состояние чего-то будет изменено.
Returns: Идентификатор выпуска, в котором ожидается, что состояние чего-то будет изменено.
@Experimental("3.7.4-RC1")
void work() {
System.gc();
}
Магическое значение.
API Note: Уведомляет о магическом значении, содержащимся в поле или локальной переменной.
void operate(final @Magical int code) {
final @Magical var limit = 256;
if (code > limit) System.gc();
}
Диапазон числовых значений.
API Note: Позволяет задать диапазон числовых значений.
void operate(final @Range(from = 0, to = 256) int code) {
if (code == 0) System.gc();
}
Изменено:
Аннотации:
Изменена документация.
Изменена документация — я добавил описание синтаксиса.
Изменена сигнатура.
Изменена документация.
Изменена сигнатура.
Изменена документация.
Изменена документация.
Изменено тело.
Изменена документация.
Изменено тело.
Изменена документация.
Изменено тело.
Изменена документация.
Изменено тело.
Изменена документация.
Изменено тело.
Изменена документация.
Изменена документация.
Изменена сигнатура.
Изменена документация.
Изменена документация.
Изменена сигнатура.
Другое:
Изменена документация.
Изменена документация.
2.0.0
Этот стабильный выпуск несовместим с предыдущим.
Произведена демодуляризация проекта.
Подробнее о релизе: 1.0.1...2.0.0
Maven
<repository>
<id>central</id>
<name>Maven Central</name>
<url>https://repo1.maven.org/maven2</url>
</repository>
<dependency>
<groupId>com.bloogefest</groupId>
<artifactId>annotation</artifactId>
<version>2.0.0</version>
</dependency>
Gradle
repositories {
mavenCentral()
}
dependencies {
implementation("com.bloogefest:annotation:2.0.0")
}
Введено:
Аннотации:
Аннотация контракта метода или конструктора.
API Note: Наличие этой аннотации говорит о том, что поведение метода или конструктора соответствует значению контракта.
@Contract("!null -> _; null -> fail")
boolean isEmpty(final @Nullable String string) throws NullPointerException {
return string.length() == 0;
}
Содержит идентификатор выпуска, в котором это будет гарантированно удалено.
Returns: Идентификатор выпуска, в котором это будет гарантированно удалено.
@Removal("3.7.4")
final boolean dev = true;
System.out.println(dev); // Не рекомендуется к использованию
Удалено:
Другое:
2.0.0-RC1
Этот предварительный выпуск несовместим с предыдущим стабильным.
Произведена демодуляризация проекта.
Подробнее о релизе: 1.0.1...2.0.0-RC1
Maven
<repository>
<id>ossrh-rc</id>
<name>OSSRH RC</name>
<url>https://s01.oss.sonatype.org/content/repositories/releases/</url>
</repository>
<dependency>
<groupId>com.bloogefest</groupId>
<artifactId>annotation</artifactId>
<version>2.0.0-RC1</version>
</dependency>
Gradle
repositories {
maven {
name = "OSSRH RC"
url = uri("https://s01.oss.sonatype.org/content/repositories/releases/")
}
}
dependencies {
implementation("com.bloogefest:annotation:2.0.0-RC1")
}
Введено:
Аннотации:
Аннотация контракта метода или конструктора.
API Note: Наличие этой аннотации говорит о том, что поведение метода или конструктора соответствует значению контракта.
@Contract("!null -> _; null -> fail")
boolean isEmpty(final @Nullable String string) throws NullPointerException {
return string.length() == 0;
}
Содержит идентификатор выпуска, в котором это будет гарантированно удалено.
Returns: Идентификатор выпуска, в котором это будет гарантированно удалено.
@Removal("3.7.4")
final boolean dev = true;
System.out.println(dev); // Не рекомендуется к использованию
Удалено:
Другое:
1.0.1
Этот стабильный релиз совместим с предыдущим.
Подробнее о релизе: 1.0.0...1.0.1
Maven
<repository>
<id>central</id>
<name>Maven Central</name>
<url>https://repo1.maven.org/maven2</url>
</repository>
<dependency>
<groupId>com.bloogefest</groupId>
<artifactId>annotation</artifactId>
<version>1.0.1</version>
</dependency>
Gradle
repositories {
mavenCentral()
}
dependencies {
implementation("com.bloogefest:annotation:1.0.1")
}
Изменено:
Другое:
Открыт доступ к пакету
com.bloogefest.annotation.analysis
.
1.0.1-RC1
Этот предварительный релиз совместим с предыдущим стабильным.
Подробнее о релизе: 1.0.0...1.0.1-RC1
Maven
<repository>
<id>ossrh-rc</id>
<name>OSSRH RC</name>
<url>https://s01.oss.sonatype.org/content/repositories/releases/</url>
</repository>
<dependency>
<groupId>com.bloogefest</groupId>
<artifactId>annotation</artifactId>
<version>1.0.1-RC1</version>
</dependency>
Gradle
repositories {
maven {
name = "OSSRH RC"
url = uri("https://s01.oss.sonatype.org/content/repositories/releases/")
}
}
dependencies {
implementation("com.bloogefest:annotation:1.0.1-RC1")
}
Изменено:
Другое:
Открыт доступ к пакету
com.bloogefest.annotation.analysis
.
1.0.0
Этот крупный выпуск первый.
Подробнее о выпуске: https://github.com/Bloogefest/BF.Annotation/commits/1.0.0
Maven
<repository>
<id>central</id>
<name>Maven Central</name>
<url>https://repo1.maven.org/maven2</url>
</repository>
<dependency>
<groupId>com.bloogefest</groupId>
<artifactId>annotation</artifactId>
<version>1.0.0</version>
</dependency>
Gradle
repositories {
mavenCentral()
}
dependencies {
implementation("com.bloogefest:annotation:1.0.0")
}
Введено:
Аннотации:
Аннотация контракта метода или конструктора.
API Note: Наличие этой аннотации говорит о том, что поведение метода или конструктора соответствует значению контракта.
@Contract("!null -> _; null -> fail")
boolean isEmpty(final @Nullable String string) throws NullPointerException {
return string.length() == 0;
}
Возвращает значение контракта.
Returns: Значение контракта.
final Contract contract = () -> "_ -> _";
System.out.println(contract.value());
Возвращает значение чистоты контракта.
Returns: Значение чистоты контракта.
final Contract contract = () -> "_ -> _";
System.out.println(contract.pure());
Аннотация чего-то экспериментального.
API Note: Наличие этой аннотации у чего-то говорит о том, что оно ещё в разработке и может быть переименовано, перемещено или вовсе удалено.
@Experimental
@Contract("_ -> _")
boolean isEmpty(final @NotNull String string) throws NullPointerException {
return string.length() == 0;
}
Аннотация того, что должно быть локализовано.
API Note: Наличие этой аннотации у чего-то говорит о том, что оно должно быть локализовано.
@Contract("_ -> _")
boolean isEmpty(final @Nls @NotNull String string) throws NullPointerException {
return string.length() == 0;
}
Аннотация того, что не должно быть локализовано.
API Note: Наличие этой аннотации у чего-то говорит о том, что оно не должно быть локализовано.
@Contract("_ -> _")
boolean isEmpty(final @NotNls @NotNull String string) throws NullPointerException {
return string.length() == 0;
}
Аннотация ненулевого значения.
API Note: Наличие этой аннотации говорит о том, что значение не должно быть нулевым.
@Contract("_ -> _")
boolean isEmpty(final @NotNull String string) throws NullPointerException {
return string.length() == 0;
}
Аннотация нулевого значения.
API Note: Наличие этой аннотации говорит о том, что значение должно быть нулевым.
@Contract("_ -> fail")
boolean isEmpty(final @Null String string) throws NullPointerException {
return string.length() == 0;
}
Аннотация обнуляемого значения.
API Note: Наличие этой аннотации говорит о том, что значение может быть нулевым.
@Contract("!null -> _; null -> fail")
boolean isEmpty(final @Nullable String string) throws NullPointerException {
return string.length() == 0;
}
Аннотация чего-то устаревшего.
API Note: Наличие этой аннотации у чего-то говорит о том, что оно устарело, не рекомендуется к использованию и может быть удалено.
@Obsolete
@Contract("_ -> _")
boolean isEmpty(final @NotNull String string) throws NullPointerException {
return string.length() == 0;
}
Содержит полный путь до альтернативы, которая хотя бы немного заменяет это.
Returns: Полный путь до альтернативы, которая хотя бы немного заменяет это.
final Obsolete obsolete = () -> "com.bloogefest.annotation.analysis.Experimental";
System.out.println(obsolete.value());