En tenant compte de la convention d'appellation standard, vérifiez qu'il existe une méthode avec "get" ou "set" préfixé au nom d'un champ de la classe :
public static int[] count(Class<? extends Object> c) {
int[] counts = new int[2];
Field[] fields = c.getDeclaredFields();
Method[] methods = c.getDeclaredMethods();
Set<String> fieldNames = new HashSet<String>();
List<String> methodNames = new ArrayList<String>();
for (Field f : fields){
fieldNames.add(f.getName().toLowerCase());
}
for (Method m : methods){
methodNames.add(m.getName().toLowerCase());
}
for (String name : methodNames){
if(name.startsWith("get") && fieldNames.contains(name.substring(3))){
counts[0]++;
}else if(name.startsWith("set") && fieldNames.contains(name.substring(3))){
counts[1]++;
}
}
return counts;
}
Si vous voulez obtenir tous les getters/setters hérités également, remplacez getDeclaredFields()
y getDeclaredMethods()
con getFields()
y getMethods()
.