Java: общая аннотация для «еще не реализовано» - PullRequest
24 голосов
/ 03 апреля 2012

Существует ли общая или стандартная аннотация в Java для методов, которые, хотя и определены, еще не реализованы?

Так, например, если бы я использовал пре-альфа-версию библиотеки, которая содержала что-то вроде

@NotImplementedYet
public void awesomeMethodThatTotallyDoesExactlyWhatYouNeed(){ /* TODO */ }

Я бы получил предупреждение во время компиляции при попытке вызвать awesomeMethodThatTotallyDoesExactlyWhatYouNeed?

Ответы [ 4 ]

16 голосов
/ 03 апреля 2012

Возможно, вы захотите использовать UnsupportedOperationException и обнаруживать вызовы к еще не реализованным методам при выполнении ваших тестов.

2 голосов
/ 02 мая 2017

Вы можете создать свою собственную аннотацию.С помощью политики хранения во время выполнения вы можете настроить целевые сборки так, чтобы они могли при необходимости искать эту аннотацию.

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({
    ElementType.ANNOTATION_TYPE, 
    ElementType.METHOD, 
    ElementType.CONSTRUCTOR,
    ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Unimplemented {

    boolean value() default true;
}
1 голос
/ 10 марта 2019

Нет, стандартная аннотация специально для методов, которые еще не реализованы, отсутствует.

Однако в JDK есть более общая аннотация, которая отмечает API, от которого разработчики не советуются, и сам компилятор Java может выдавать предупреждения при его использовании. Я говорю о @Deprecated, о котором многие разработчики думают только как о «объявлении об удалении». Однако в соответствующих статьях в документации JDK (например, для Java 7 и Java 9 ) перечислено несколько примеров использования, только один из которых касается удаления:

  • API опасен (например, метод Thread.stop).

  • Существует простое переименование (например, AWT Component.show/hide заменено на setVisible).

  • Вместо этого можно использовать более новый и лучший API.

  • Устаревший API будет удален.

Я думаю, что ваше дело "еще не реализовано", безусловно, идет в том же направлении, что и те. Кроме того, если метод всегда выдает NotYetImplementedException, он даже соответствует примеру «API опасен».

Итак, все, что вам нужно сделать, это следующее:

  1. Добавить @Deprecated к методу
  2. Добавить @deprecated Javadoc для объяснения фона
  3. Сконфигурируйте вашу сборку для вызова компилятора с -Xlint:deprecation, чтобы он выдавал предупреждения.
1 голос
/ 03 апреля 2012

Google библиотеки используют аннотации @ Beta для API, которые могут измениться, но методы реализованы, хотя

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