Sto facendo alcuni esercizi sulle annotazioni e in uno di questi chiedeva di annotare una classe con una annotazione completa e di fare una serie di controllo. Uno di questo controlli è quello sull'incapsulamento.
Nella classe ho inserito una variabile public che teoricamente non dovrebbe permettere l'incapsulamento (dal momento in cui non è private) ma non sono riuscito a sviluppare il metodo.
Questa è la soluzione del manuale:
codice:
private static void controlloIncapsulamento(Class objectClass4, String className) throws AnnotationException, NoSuchMethodException {
Field[] variabili = objectClass4.getDeclaredFields();
for(Field variabile : variabili) {
final String nomeVariabile = variabile.getName();
final Class<?> type = variabile.getType();
final Method setMethod = objectClass4.getDeclaredMethod("set" + capitalize(nomeVariabile), type);
final Method getMethod = objectClass4.getDeclaredMethod("get" + capitalize(nomeVariabile));
if (setMethod == null || getMethod == null || !getMethod.getReturnType().equals(type)) {
throw new AnnotationException("variabile " + nomeVariabile + " non incapsulata correttamente");
}
}
System.out.println("controllo incapsulamento: OK \n");
}
private static String capitalize(String string) {
return string.substring(0, 1).toUpperCase() + string.substring(1);
}
In tutta sincerità non ho capito assolutamente nulla della logica di funzionamento. Potete aiutarmi a capire come funziona questo metodo?