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'.
   }
}

可能ですか?いいえの場合は、その理由を具体的に記入してください。

4

3 に答える 3

3

Chris Jester-Young のコメントは素晴らしかったです。それは言います:

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

Javaのジェネリックにおける消去の概念は何ですか?も参照してください。

そしてhttp://gafter.blogspot.com/search?q=super+type+token

于 2012-10-03T07:15:31.593 に答える
2

Javaでオブジェクトを保持している参照のクラス名を調べる

できません。

  1. 'オブジェクトを保持する参照などというものはありません。そのような参照はゼロかもしれないし、何億兆もあるかもしれない。

  2. 保持されているオブジェクト内から取得することはできません。

于 2012-10-03T08:01:42.813 に答える
1

呼び出すと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 メソッドを使用しています。

于 2012-10-03T07:06:14.283 に答える