我正在寻找实现方法的最佳方法,这种方法可以让我从某些类中获得某些类的“最年轻”超类:
List<Class<?>>.
例如:有这样的设计:
技能
角色
被动
有效
光环
OfHealing
通用
即时
秘密
ArrayList<Class<? extends Skill>> array = new ArrayList<Class<? extends Skill>>();
array.add(Skill.class);
array.add(SkillCast.class);
array.add(SkillActive.class);
array.add(SkillAura.class);
array.add(SkillInstant.class);
public Class<? extends Skill> getYoungestParent(Class<? extends Skill> clazz, List<Class<? extends Skill>> seachIn)
{
return ...;
}
请注意,我扫描的数组并不总是包含示例中表示的整个继承结构。我需要找到最亲密的关系。 我也无法存储这些关系(保持注册表),因为系统涉及API和很多反射。
我想到的只有很多isAssignableFrom和isInstance,但是我无法理解如何以聪明的方式做到这一点(没有无限数量的if语句)。
答案 0 :(得分:2)
有些事情(不确定你的确切要求)
public Class getYoungestParent(Class clazz, Set<Class> set)
{
if(clazz==null)
return Object.class;
if(set.contains(clazz))
return clazz;
return getYoungestParent( clazz.getSuperclass(), set );
}