Sobes.tech
Junior — Middle

Ako môžete ručne vytvoriť inštanciu triedy na prácu s anotáciami, bez použitia automatickej inicializácie?

sobes.tech AI

Odpoveď od AI

V Jave sa bežično za delo z anotacijami običajno uporablja mehanizem refleksije, ki omogoča pridobivanje instanc anotacij, ki so uporabljene na razredih, metodah ali poljih. Vendar, če je potrebno ročno ustvariti instanco anotacije (na primer za testiranje), to lahko storite z uporabo dinamičnega proxyja.

Anotacije v Javi so vmesniki, zato je mogoče ustvariti dinamični proxy, ki implementira potreben vmesnik anotacije in določi vedenje metod (elementov anotacije).

Primer ročnega ustvarjanja instance anotacije:

import java.lang.annotation.Annotation;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

// Primer anotacije
@interface MyAnnotation {
    String value();
}

public classRucnoUstvarjanjeInstanceAnotacije {
    public static void main(String[] args) {
        InvocationHandler handler = new InvocationHandler() {
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) {
                if (method.getName().equals("value")) {
                    return "Primer";
                }
                if (method.getName().equals("annotationType")) {
                    return MyAnnotation.class;
                }
                return null;
            }
        };

        MyAnnotation annotation = (MyAnnotation) Proxy.newProxyInstance(
                MyAnnotation.class.getClassLoader(),
                new Class[]{MyAnnotation.class},
                handler);

        System.out.println(annotation.value()); // Izpis: Primer
    }
}

Na ta način se ročno ustvari proxy objekt, ki implementira vmesnik anotacije in vrne določene vrednosti elementov.