2014-03-31 81 views
0

因此,這可能是一個簡單的問題,因爲我只在這裏丟失了一個命令。 如何列出從特定類繼承的所有這些類的類型。或者以另一種方式表述:如何列出班級中所有兒童班的類型?列表從其他類繼承的類的類型

public class person { 

    person() 
    {  
     listChilds(this); 
    } 
} 

listChilds在這種情況下會產生,可能會含有類,如teacherfootballPlayerstudentplumber等所有子類的getClass()命令基本上是一個列表。

實際上有辦法做到這一點嗎?

+5

這是不可能的。根據定義,超類不知道從它繼承什麼。你將不得不手動實現一些東西。 – Kon

+1

在類似的筆記中,它可能會超出範圍:例如。列出Object的子項只列出被導入材料範圍覆蓋的類。 – Fallenreaper

+1

你爲什麼想這樣做? – Christian

回答

0

雖然不能點播知道擴展它的類,你可以稍微偷偷摸摸和緩存內容,利用它的構造:

public class Inheritance { 

    public Inheritance() { 
     System.out.println(this.getClass().getName()); 
    } 

    public static void main(String[] args) { 
     Testing test = new Testing(); 
    } 

} 

class Testing extends Inheritance { 

    public Testing() { 
     super(); 
    } 

} 

將打印「測試」,在超使用this.getClass()構造函數將返回正在擴展它的類的Class<?>實例。

0

這是不可能的,因爲一個類不知道誰繼承了它。見oracle docs,在這裏你可以看到你想要做的背後的基本概念。

0

http://code.google.com/p/reflections/相當容易。這段代碼列表JPanel所有子類,例如:

import java.util.Set; 

import javax.swing.JPanel; 

import org.reflections.Reflections; 
import org.reflections.scanners.SubTypesScanner; 
import org.reflections.util.ClasspathHelper; 

public class SubtypesReflectionsTest 
{ 
    public static void main(String[] args) 
    { 
     Class<?> c = JPanel.class; 
     Reflections reflections = new Reflections(
      "", ClasspathHelper.forClass(c), 
      new SubTypesScanner(false)); 
     Set<?> subTypes = reflections.getSubTypesOf(c); 
     for (Object element : subTypes) 
     { 
      System.out.println("Class "+element); 
     } 
    } 
} 

但我同意上司的評價:你應該真的想想你在做什麼,在那裏,如果沒有更合適的方式來實現自己的目標。