1

我的 android 应用程序中有这段代码:

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

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

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

但它给出了错误,因为 ObjClass 不是类型。和

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

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

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

也给出错误。

而且我不能使用泛型,因为它:如何将泛型类作为参数传递给 Intent 构造函数

如何转换类型中的类?

ps.:编辑得更清楚

4

3 回答 3

0

泛型是一个纯粹的编译时实用程序,仅用于编译时类型检查。泛型不会影响代码在运行时的作用。ObjClass是一个变量,其值仅在运行时才知道。因此,它对泛型没有用,因为它在编译时不可用。所以泛型对你没有用。

由于您不能使用泛型来帮助进行类型检查,根据您的要求(我不知道这些getApplicationContext(),ds,campos是什么),您可以选择任意类型参数:

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

(或在 Java 7 中,new DbAdapter<>(getApplicationContext(),ds,campos)

或使用原始类型(不推荐):

new DbAdapter(getApplicationContext(),ds,campos)
于 2013-03-22T05:48:08.070 回答
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 回答
-1

这应该适合你

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

是的,这次运行,但正如@jahroy 所说,这不是我们的问题。

于 2013-03-21T20:09:35.257 回答