私は、一般的な基本クラスを持っている:ジェネリッククラス - のgetClass()のgetName()
public class BaseLabel<T> extends JXLabel {
private static final long serialVersionUID = 1L;
public BaseLabel() {
System.out.println(T.class.getClass().getName()); //error
}
}
と子クラス:
public class ChildLabel extends BaseLabel<ChildLabel> {
private static final long serialVersionUID = 2L;
public ChildLabel() {
}
}
私はコンパイルエラーを取得しています。
BaseClassのコンストラクタから実際のクラス名を取得する方法はありますか。ここでは、実際のクラスで私はインスタンス化しようとしているクラスを参照しています。
たとえば、私はChildClassをインスタンス化しています。ChildClass clz = new ChildClass()
;
println()
はpackage.ChildClass
と表示されます。
ありがとうございます。
コンパイルエラーは次のとおりです。
cannot select from a type variable System.out.println(T.class.getClass().getSimpleName());
私はabstract BaseClass
のコンストラクタからthis.getClass.getSimpleName()
を呼び出した場合。 ChildClass
を印刷しています。
なぜですか?
ChildClass
をインスタンス化しているので、これはChildClass
のオブジェクトを指しています。
コンパイル時に利用できない情報を求めているので、私が知る限り、あなたがしようとしていることは不可能です。しかし、実行時でさえ、この情報を得るためにJavaの一般的な制限にぶつかるでしょう。この記事、特にジェネリックスとタイプ消去に関する部分を読んでください。[Java理論と実践:Generics gotchas](http://www.ibm.com/developerworks/java/library/j-jtp01255/index.html) –
コンパイルエラーは言う? – Thomas
JXLabelをインポートしていますか? – ewok