Как получить значение аннотации из поля перечисления, если оно присутствует? - PullRequest
0 голосов
/ 11 января 2020

Я уже искал ответ, но большинство, если не все ответы покрывают случай, когда вы 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, или выполнять другие вещи.

...