第2个回答 2016-01-03
public class ActionListenerInstaller {
public static void install(Object targetObject) throws IllegalAccessException, InstantiationException {
for (Field field : targetObject.getClass().getDeclaredFields()) {
// 如果该成员变量被ActionListenerFor标记了
if (field.isAnnotationPresent(ActionListenerFor.class)) {
// 设置访问权限
field.setAccessible(true);
// 获取到成员变量的值
AbstractButton targetButton = (AbstractButton) field.get(targetObject);
// 获取到注解中的Listener
Class<? extends ActionListener> listener = field.getAnnotation(ActionListenerFor.class).listener();
// 添加到成员变量中
targetButton.addActionListener(listener.newInstance());
}
}
}
}