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'.
}
}
可能ですか?いいえの場合は、その理由を具体的に記入してください。
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'.
}
}
可能ですか?いいえの場合は、その理由を具体的に記入してください。
Chris Jester-Young のコメントは素晴らしかったです。それは言います:
できません。ローカル変数の静的型は、バイトコードにも実行時にも保持されません。(フィールドの場合は、フィールドを含むクラスでリフレクションを使用して、フィールドの型を取得できます。)
Javaのジェネリックにおける消去の概念は何ですか?も参照してください。
Javaでオブジェクトを保持している参照のクラス名を調べる
できません。
'オブジェクトを保持する参照などというものはありません。そのような参照はゼロかもしれないし、何億兆もあるかもしれない。
保持されているオブジェクト内から取得することはできません。
呼び出すとa.getClass()
、このオブジェクトが作成されたクラスのインスタンスが常に返されます。あなたの場合はB
そうですB.class
。
メソッドを呼び出しa
てクラスを取得したい場合A.class
、通常の方法では実行できません。
1つの方法は、メソッドを定義することですA
public static Class<A> getType() {
return A.class;
}
そして、a.getType()
which isを呼び出すことができますA.class
。オーバーライドされていないため、ここでは static メソッドを使用しています。