我的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。:编辑得更清楚
答案 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不是我们的问题。