1
我找的,讓我獲得「最年輕」的一些類的一些超類實現方法的最佳途徑:查找「老三」超類
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語句)。沿(不知道您的具體要求)行
解決方案的速寫:爲每個類,調用'superclass',直到你回到'Object'並保持結果在以「Object」開頭的數組或列表中;然後找到兩個類的最低公共超類,只是從列表的開始迭代,而條目是相同的。 –