如何在类型中转换类<! - ? - >?

时间:2013-03-21 19:21:10

标签: java generics

我的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));

也会出错。

我不能使用泛型:How can i pass a generic class as param to Intent constructor

如何转换类型中的类?

ps。:编辑得更清楚

3 个答案:

答案 0 :(得分: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) 

答案 1 :(得分:0)

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

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

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

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

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

new DbAdapter(getApplicationContext(),ds,campos)

答案 2 :(得分:-1)

这应该适合你

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

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