2012-10-03 10 views
6
class A { 
} 

class B extends A { 
} 

class TestType { 
    public static void main(String args[]) { 
     A a = new B(); 
     // I wish to use reference 'a' to check the Reference-Type which is 'A'. 
    } 
} 

は可能ですか?いいえの場合は理由を明記してください。Javaでオブジェクトを保持する参照のクラス名を確認してください

+7

できません。静的型のローカル変数は、バイトコードにも実行時にも保持されません。 (フィールドの場合、フィールドのクラスにリフレクションを使用してフィールドの型を取得することができます) –

+1

@ ChrisJester-Youngコメントの代わりに答えをする必要があります。 – Jesper

答えて

1

a.getClass()を呼び出すと、このオブジェクトが作成されたクラスのインスタンスが返されます。あなたの場合はBですので、B.classが返されます。

aでメソッドを呼び出し、クラスをA.classとして取得する場合は、通常の方法では実行できません。

片道アウトはA

public static Class<A> getType() { 
     return A.class; 
    } 

でメソッドを定義することだろうと、あなたはA.classあるa.getType()を呼び出すことができます。ここでは、オーバーライドされていないため、静的メソッドを使用しています。

+0

しかし、このメソッドは一貫性のためにすべてのクラスに追加する必要があります。したがって、getTypeが呼び出されると、メソッドはクラス 'B'に対して呼び出されます。 – Ankur

+0

静的メソッドを使用するための答えを更新しました。 –

+0

はい、ソリューションが機能しました。 :)それは非常にエレガントでシンプルなソリューションでした。 – Amber

3

Chris Jester-Young's commentが優れていた。それは言う:

できません。静的型のローカル変数は、バイトコードにも実行時にも保持されません。 (それはフィールドの場合は、フィールドの型を取得するには、フィールドの含むクラスにリフレクションを使用することができます。)

What is the concept of erasure in generics in Java?

そしてhttp://gafter.blogspot.com/search?q=super+type+tokenも参照してください。

2

チェックするJava

あなたができないでオブジェクトを保持している参照のクラス名。

  1. オブジェクトを保持リファレンス」のようなものはありません。そのような参照はゼロかもしれないし、6つのものがあるかもしれない。

  2. 保持しているオブジェクトの内部からは取得できません。

関連する問題