Получение аннотации типа параметра

Начинаю изучать аннотации. Есть аннотация вида:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE_USE)
public @interface Bar{
    
    String value() default "Hello, Bar!";
    
}

И метод:

public static void show(@Bar int count) {
        
        //some code
        
    }

Как с помощью рефлексии получить дефолтное значение из аннотации? Аннотирую тип параметра метода.


Ответы (1 шт):

Автор решения: Alexandr

Как-то так:

package com.somepackage;

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

public class Main {

    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.TYPE_USE)
    public @interface Bar{
        String value() default "Hello, Bar!";
    }

    public static void show(@Bar int count) {
        //some code
    }

    public static void main(String[] args) throws Exception {
        var method =
                Main.class.getDeclaredMethod(
                        "show", int.class);
        Arrays.stream(method.getAnnotatedParameterTypes())
                .forEach(apt -> {
                    Arrays.stream(apt.getAnnotations())
                            .filter(a -> a instanceof Bar)
                            .map(a -> (Bar)a)
                            .forEach(ba -> System.out.println(ba.value()));
                });
    }

}

Вывод:

Hello, Bar!
→ Ссылка