私は自分のアプリケーションにTestActivityと呼ばれるActivityクラスを持っている場合は、この例のようにその名前でそのクラスを取得する方法があります:その名前でクラスを取得
Class<?> c = getClassByName("TestActivity");
私は自分のアプリケーションにTestActivityと呼ばれるActivityクラスを持っている場合は、この例のようにその名前でそのクラスを取得する方法があります:その名前でクラスを取得
Class<?> c = getClassByName("TestActivity");
使用はforName代わり..
このような何か..
try {
Class<?> act = Class.forName("com.bla.TestActivity");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
ポストを閉じてください。例:com.bla.TestActivityをClass.forNameの引数として受け取ります。 – Richie
'Class <? SomeClass> 'を拡張しますか? – Gobliins
@ゴブリンズいいえ - コンパイラはどのような種類のクラスを取得するのか保証できませんので、クラス>が得られます。どのようなクラスを取得するのか分かっているなら、キャストする必要があります(キャストが安全でないため、キャストの警告が未確認であっても)。 – Dylanthepiguy
Class.forNameはそれに例外を持っているようです。これは、上記の問題を解決するためのものです。
try { t = Class.forName("com.package.classname"); } catch (Exception ignored){}
このように答えるための通常の方法は、**答えを編集することです**。 Javaでは例外が豊富であるため(コードでは無視されます)、**コメント**で十分です。 – crazyhatfish
@crazyhatfish - パトリックは何も役に立たないかもしれないように思えるかもしれません。 – amess
@amessおっと、あなたの権利、私はコメントが必要なことを忘れるrep。私を修正してくれてありがとう。 – crazyhatfish
Class::forName
を使用すると、不明な種類のクラスオブジェクトを取得できます。あなたは型指定されたクラスを取得したい場合は 、あなたはClass::forName
によって返されたクラスにClass::asSubclass
を使用することができます。もちろん
Class<? extends Activity> activityClass = Class.forName("com.example.TestActivity")
.asSubclass(Activity.class);
あなたはまた、例外の異なる種類の束を処理する必要があります。反射を扱うときはいつもそうです。
それはあなたの質問に最も関連の答えではないかもしれないが、それは文字列としてクラス名リテラルをハードコーディングすることが一般的に悪いです。使用する方が良いかもしれません。
Class<?> act = TestActivity.class;
構文です。
正しい答えを選択して、あなたが同様に完全なパッケージ名を与える必要があり –