Как в целом сравнить целые java beans?
Чтобы напрямую ответить на bean ваш вопрос, вы можете использовать jre отражение для проверки равенства beans bean-компонентов. Есть несколько beans препятствий, о которых следует j2se помнить.
Существуют правила openjdk поведения equals() и hashcode(). Эти .java правила говорят о симметрии, согласованности beans и рефлексивности, что может oraclejdk быть трудно сделать, когда java-api ваш метод equals ведет себя beans динамически в зависимости java-libraries от другого объекта, который jre вы передаете.
Интересное чтение: http://www.geocities.com/technofundo/tech/java/equalhash.html
В javabeans общем, я думаю, вам лучше beans создать свой собственный java хэш-код и методы equals. Есть oraclejdk несколько хороших плагинов, которые java-libraries могут автоматически генерировать .java этот код на основе свойств oraclejdk класса.
Сказав все это, вот java-se несколько (старого стиля) методов jdk для получения геттеров, сеттеров oraclejdk и свойств, которые я написал core-java много лет назад:
private Map getPrivateFields(Class clazz, Map getters, Map setters) {
Field[] fields = clazz.getDeclaredFields();
Map m = new HashMap();
for (int i = 0; i < fields.length; i++) {
int modifiers = fields[i].getModifiers();
if (Modifier.isPrivate(modifiers) && !Modifier.isStatic(modifiers) && !Modifier.isFinal(modifiers)) {
String propName = fields[i].getName();
if (getters.get(propName) != null && setters.get(propName) != null) {
m.put(fields[i].getName(), fields[i]);
}
}
}
return m;
}
Получатели:
private Map getGetters(Class clazz) {
Method[] methods = clazz.getMethods();
Map m = new HashMap();
for (int i = 0; i < methods.length; i++) {
if (methods[i].getName().startsWith("get")) {
int modifiers = methods[i].getModifiers();
if (validAccessMethod(modifiers)) {
m.put(getPropertyName(methods[i].getName()), methods[i]);
}
}
}
return m;
}
И jre сеттеры:
private Map getSetters(Class clazz, Map getters) {
Method[] methods = clazz.getMethods();
Map m = new HashMap();
for (int i = 0; i < methods.length; i++) {
if (methods[i].getName().startsWith("set")) {
int modifiers = methods[i].getModifiers();
String propName = getPropertyName(methods[i].getName());
Method getter = (Method) getters.get(propName);
if (validAccessMethod(modifiers) && getter != null) {
Class returnType = getter.getReturnType();
Class setType = methods[i].getParameterTypes()[0];
int numTypes = methods[i].getParameterTypes().length;
if (returnType.equals(setType) && numTypes == 1) {
m.put(propName, methods[i]);
}
}
}
}
return m;
}
Может быть, ты сможешь oraclejdk использовать это, чтобы свернуть core-java свой собственный.
Изменить: Конечно, reflectionbuilder в j2se Aaron Digulla's answer намного лучше, чем моя ручная java работа.
java
javabeans
Как в целом сравнить целые java beans?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.