이 코드는 여러분을 가까이에있게 할 것입니다. 다른 사람들이 말했듯이 상속 깊이가 쉽게 같을 수 있기 때문에 인터페이스에 문제가 발생할 수 있습니다. 또한 null 검사 등을 추가해야합니다.
이 예제에서 FooBar3는 FooBar2가 FooBar를 확장합니다.
public static void main(String[] args) {
List<Class<?>> l = new ArrayList<Class<?>>() {{
add(FooBar2.class);
add(FooBar.class);
} };
System.out.println(getClosestParent(new FooBar3(), l));
}
public static Class getClosestParent(Object o, List<Class<?>> classes) {
List<Class<?>> related = getRelated(o, classes);
Collections.sort(related, new Comparator<Class<?>>() {
public int compare(Class<?> o1, Class<?> o2) {
if (o1.isAssignableFrom(o2)) {
return -1;
} else if (o2.isAssignableFrom(o1)) {
return 1;
}
return 0;
}
});
return related.get(0);
}
public static List<Class<?>> getRelated(Object o, List<Class<?>> classes) {
List<Class<?>> filtered = new ArrayList<Class<?>>();
for (Class<?> aClass : classes) {
if (aClass.isAssignableFrom(o.getClass())) {
filtered.add(aClass);
}
}
return filtered;
}
}는 대단히 및 즉시 사용 가능한 솔루션을했을 것이다 가장 좋은 @Host –
:-) 염두에 두어야 할 것들의 목록을 제공해 주셔서 감사합니다. 하지만 하나가 부족해서 유용 할 수 있다고 생각했습니다 .--) 우리가 똑같은 견해를 공유하고 있습니다 :-) – KLE