Этот выпуск несовместим с предыдущим — все аннотации были переработаны, а некоторые даже удалены. Например, аннотация
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();
}
Возвращает идентификатор выпуска, выпуск-кандидата или снимка, в котором планируется, что состояние элемента перестанет быть обозначенным как экспериментальное.
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: Для того чтобы применение этого параметра было максимально эффективно, следуйте рекомендациям по применению.
@Obsolete(from = "3.7.4-RC1", to = "3.7.4-RC2")
@FunctionalInterface
public interface Worker {
@Obsolete(from = "3.7.4-RC2", to = "3.7.4-RC3")
@Contract("-> ?")
void work();
}
Возвращает идентификатор выпуска, выпуск-кандидата или снимка, в котором планируется, что элемент будет удалён.
API Note: Этот параметр был введён в выпуск-кандидате 3.0.0-RC1, после чего планируется допускать лишь небольшие изменения в его документации.
Implementation Requirements: Реализация этого параметра по умолчанию является эталонной, так как она полностью следует спецификации.
Implementation Note: Для того чтобы применение этого параметра было максимально эффективно, следуйте рекомендациям по применению.
@Obsolete(from = "3.7.4-RC1", to = "3.7.4-RC2")
@FunctionalInterface
public interface Worker {
@Obsolete(from = "3.7.4-RC2", to = "3.7.4-RC3")
@Contract("-> ?")
void work();
}
Изменено:
Аннотации:
Полностью переписана документация, а основная её часть перемещена в веб-документацию.
Полностью переписана документация, а основная её часть перемещена в веб-документацию.
Полностью переписана сигнатура.
Полностью переписана документация, а основная её часть перемещена в веб-документацию.
Полностью переписана документация, а основная её часть перемещена в веб-документацию.
Дополнена сигнатура.
Полностью переписана документация, а основная её часть перемещена в веб-документацию.
Дополнена сигнатура.
Полностью переписана документация, а основная её часть перемещена в веб-документацию.
Дополнена сигнатура.
Полностью переписана документация, а основная её часть перемещена в веб-документацию.
Полностью переписана документация, а основная её часть перемещена в веб-документацию.
Дополнена сигнатура.
Полностью переписана документация, а основная её часть перемещена в веб-документацию.
Полностью переписана сигнатура.
Полностью переписана документация, а основная её часть перемещена в веб-документацию.
Полностью переписана сигнатура.