找到“最年轻”的超类

时间:2015-08-08 02:15:41

标签: java

我正在寻找实现方法的最佳方法,这种方法可以让我从某些类中获得某些类的“最年轻”超类:

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语句)。

1 个答案:

答案 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 );
}