Я уже искал ответ, но большинство, если не все ответы покрывают случай, когда вы oop просматриваете все объявленные поля класса enum, чтобы затем найти те с аннотацией и делать что-то.
Это не только слишком сложен для меня, но и не очень полезен для меня, поскольку я использую поля enum в методе и перебираю все перечисление, чтобы проверить, содержит ли поле, используемое в методе, аннотацию, кажется немного излишним.
Настройка :
Предположим, у меня есть @interface
"NotSupported", который выглядит следующим образом:
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface NotSupported{
Type value();
/*
* I use this enum class above to declare the type not supported.
*/
enum Type{
GET,
POST
}
}
Как вы можете видеть, содержит ли он перечисление с двумя типы. Позже я бы использовал его как @NotSupported(NotSupported.Type.GET)
, чтобы указать, какие методы / действия не будут поддерживаться аннотированным полем.
Далее у меня есть перечисление, содержащее различные сайты.
public enum Site{
EXAMPLE_COM("https://example.com"),
@NotSupported(NotSupported.Type.POST)
NOPOST_EXAMPLE_COM("https://nopost.example.com"),
@NotSupported(NotSupported.Type.GET)
NOGET_EXAMPLE_COM("https://noget.example.com")
private String url;
Site(String url){
this.url = url;
}
public String getUrl(){
return url;
}
}
И наконец, у меня есть методы для выполнения различных действий GET и POST на сайтах перечисленного выше перечисления:
public class HttpUtil(){
public String getContent(Site site){
Url url = new URL(site.getUrl());
// We perform stuff here to get the String from the site
}
public void postContent(Site site, String content){
Url url = new URL(site.getUrl());
// We perform stuff here to post the String to the site
}
}
Теперь я хочу добавить проверку if или подобное, чтобы выяснить, снабжено ли указанное поле (сайт) аннотацией @NotSupported
и, если да, если тип набора GET для методов get или POST для методов post, то затем выдается исключение, например IllegalStateException, или выполнять другие вещи.