📢 Nuovo Corso Laravel API disponibile!

Esercizi Reflection in Java

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();
}
}
}