2012-02-20 166 views
0

有誰知道如何獲得Java中的抽象類的聲明/封裝類?在這種情況下,我想從someClass中獲取anotherClass類。Java爲抽象類聲明類?

例子:

public class anotherClass extends someClass{ 
... 
} 

public abstract class someClass{ 
... 
    this.getClass().getEnclosingClass(); 
} 
+0

你在哪裏知道,這只是一個(即*的*聲明類)?它可能是數百個! – Ingo 2012-02-20 17:08:05

+0

你的意思是什麼封閉類'someClass'? – 2012-02-20 17:10:14

+0

它可能是,但不會那些是他們自己的someClass的實例嗎? – 2012-02-20 17:10:31

回答

3

如果您在抽象類中調用this.getClass()它仍然會返回類的實際實現的。在你的情況下調用this.getClass()將返回anotherClass,這是你想要的,如果我沒有錯。

+0

唉奇怪,不知道爲什麼這樣的作品,但它確實:) – 2012-02-20 17:16:15

+0

只是出於好奇,那麼你會如何真正從抽象類someClass獲得一些類? – 2012-02-20 17:17:28

+1

@Kevin我試過'getClass()。getGenericSuperclass()',它工作 - 它顯示'someClass'。 – 2012-02-20 17:22:17

4

有沒有辦法做到這一點,而無需使用reflection

+0

顯然你可以。見Boris Strandjev的回答。 – 2012-02-20 17:16:49

+0

他已經在使用反射。 – 2012-02-20 17:17:11

+0

@kevin thats不一樣,這可能是你想要的,但問題是有點不同 – NimChimpsky 2012-02-20 17:17:23

0

如果你想避免反射的解決方案,你可以強迫別人你自己通過一些奇怪的經常性仿製藥,像下面這樣:

class AnotherClass extends SomeClass<AnotherClass> { 
    public AnotherClass() { 
     super(AnotherClass.class); 
    } 
} 

abstract class SomeClass<T extends SomeClass<T>> { 
    final Class<T> enclosing; 
    public SomeClass(Class<T> c) { 
     enclosing = c; 
    } 
}