1

Androidアプリケーションに次のコードがあります:

String objclassname = getIntent().getExtras().getString("ObjClass");

Class<?> ObjClass = Class.forName(objclassname);

dbListView.setAdapter(new DbAdapter<ObjClass>(getApplicationContext(),ds,campos));

しかし、ObjClass は Type ではないため、エラーが発生します。と

String objclassname = getIntent().getExtras().getString("ObjClass");

Class<?> ObjClass = Class.forName(objclassname);

dbListView.setAdapter(new DbAdapter<ObjClass.getClass()>(getApplicationContext(),ds,campos));

エラーも出ます。

そして、私はそれが原因でジェネリックを使用できません:ジェネリッククラスをパラムとしてインテントコンストラクターに渡すにはどうすればよいですか

クラスをタイプに変換するにはどうすればよいですか?

ps .: より明確になるように編集

4

3 に答える 3

0

このようなものを試すことができます

String objclassname = getIntent().getExtras().getString("ObjClass");

Class<T> ObjClass = (Class<T>) Class.forName(objclassname);

dbListView.setAdapter(new DbAdapter<T>(getApplicationContext(),ds,campos));

ただし、次のようなメソッドをパラメーター化する必要があります

public <T> void doSomething (String className) 
于 2013-03-21T19:35:41.273 に答える
0

Generics は純粋にコンパイル時のユーティリティであり、コンパイル時の型チェックにのみ使用されます。ジェネリックは、実行時のコードの動作には影響しません。ObjClass実行時にのみ値がわかる変数です。したがって、コンパイル時に使用できないため、ジェネリックには役に立ちません。したがって、ジェネリックは役に立ちません。

ジェネリックを使用して型チェックを支援することはできないため、要件によっては (これらが何であるかはわかりませんgetApplicationContext(),ds,campos)、任意の型パラメーターを選択できます。

new DbAdapter<Object>(getApplicationContext(),ds,campos)

(または Java 7 では、new DbAdapter<>(getApplicationContext(),ds,campos))

または raw タイプを使用します (推奨されません):

new DbAdapter(getApplicationContext(),ds,campos)
于 2013-03-22T05:48:08.070 に答える
-1

これはあなたのために働くはずです

Class myclass = Class.forName("package.classname");
Object o = myclass.newInstance();

はい、これは実行されますが、@jahroy は私たちの問題ではありません。

于 2013-03-21T20:09:35.257 に答える