🚀 Nuova versione beta disponibile! Feedback o problemi? Contattaci

Esercizi Reflection in Java

Codegrind Team•Jul 12 2024

Ecco degli esercizi con soluzione per praticare l’uso del Reflection in Java.

Esercizio 1: Ottenere il Nome della Classe

Creare un oggetto di una classe e utilizzare la reflection per ottenere e stampare il nome della classe.
public class ReflectionEsempio1 {
    public static void main(String[] args) {
        String str = "Ciao, mondo!";
        Class<?> classe = str.getClass();
        System.out.println("Nome della classe: " + classe.getName());
    }
}

Esercizio 2: Ottenere i Metodi di una Classe

Utilizzare la reflection per ottenere e stampare i nomi di tutti i metodi dichiarati in una classe.
import java.lang.reflect.Method;

public class ReflectionEsempio2 {
    public static void main(String[] args) {
        Class<?> classe = String.class;
        Method[] metodi = classe.getDeclaredMethods();

        System.out.println("Metodi della classe String:");
        for (Method metodo : metodi) {
            System.out.println(metodo.getName());
        }
    }
}

Esercizio 3: Invocare un Metodo Usando la Reflection

Creare un oggetto di una classe e utilizzare la reflection per invocare un metodo su di esso.
import java.lang.reflect.Method;

public class ReflectionEsempio3 {
    public static void main(String[] args) {
        try {
            String str = "Hello, world!";
            Method metodo = String.class.getMethod("toUpperCase");
            String risultato = (String) metodo.invoke(str);
            System.out.println("Risultato: " + risultato);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Esercizio 4: Accesso ai Campi Privati

Utilizzare la reflection per accedere e modificare il valore di un campo privato in una classe.
import java.lang.reflect.Field;

class Persona {
    private String nome = "Mario";
}

public class ReflectionEsempio4 {
    public static void main(String[] args) {
        try {
            Persona persona = new Persona();
            Field campoNome = Persona.class.getDeclaredField("nome");
            campoNome.setAccessible(true);

            System.out.println("Valore originale del campo 'nome': " + campoNome.get(persona));

            campoNome.set(persona, "Luigi");
            System.out.println("Nuovo valore del campo 'nome': " + campoNome.get(persona));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Esercizio 5: Creazione di un Oggetto Usando la Reflection

Utilizzare la reflection per creare un'istanza di una classe usando il suo costruttore predefinito.
public class ReflectionEsempio5 {
    public static void main(String[] args) {
        try {
            Class<?> classe = Class.forName("java.util.Date");
            Object oggetto = classe.getDeclaredConstructor().newInstance();
            System.out.println("Oggetto creato: " + oggetto.toString());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Esercizio 6: Ottenere le Annotazioni di un Metodo

Utilizzare la reflection per ottenere e stampare le annotazioni presenti su un metodo di una classe.
import java.lang.annotation.*;
import java.lang.reflect.Method;

@Retention(RetentionPolicy.RUNTIME)
@interface Test {
    String value() default "Test";
}

class Esempio {
    @Test(value = "Metodo di test")
    public void metodoDiTest() {
        System.out.println("Esecuzione del metodo di test");
    }
}

public class ReflectionEsempio6 {
    public static void main(String[] args) {
        try {
            Method metodo = Esempio.class.getMethod("metodoDiTest");

            if (metodo.isAnnotationPresent(Test.class)) {
                Test annotazione = metodo.getAnnotation(Test.class);
                System.out.println("Annotazione trovata: " + annotazione.value());
            }

            Esempio esempio = new Esempio();
            metodo.invoke(esempio);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}