Java 如何在类型中转换类?

Java 如何在类型中转换类?,java,generics,Java,Generics,我的android应用程序中有以下代码: String objclassname = getIntent().getExtras().getString("ObjClass"); Class<?> ObjClass = Class.forName(objclassname); dbListView.setAdapter(new DbAdapter<ObjClass>(getApplicationContext(),ds,campos)); 但它给出了错误,因为Obj

我的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<T> ObjClass = (Class<T>) Class.forName(objclassname);

dbListView.setAdapter(new DbAdapter<T>(getApplicationContext(),ds,campos));
但是您需要参数化方法,例如

public <T> void doSomething (String className) 

这应该是你的工作

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

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

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

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

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

类是类型对象类是变量。字符串,整数,双精度。。。也是类型。我认为您需要学习一些更基本的Java。每当您发现自己想要在泛型中使用类时,您想要做的就相当于未经检查的强制转换,所以不用麻烦使用这个类。我认为类型擦除可能会使这变得不可能好@BheshGurung,但是ObjClass.Class或ObjClass.getClass也不起作用。ObjClass.getClass发生在运行时,但是泛型只在编译时有效。但是这样做就违背了你的想法。如果我使用泛型,我不需要在内部传递ObjClass。我的意思是泛型用于编译时,所以即使像您提到的那样工作了,它也违背了泛型的目的,因为您仍然有一个用于查找类的字符串,它已经抛出了一个异常。所以我不想在这里使用泛型,但我不能使用泛型,因为:是的,我已经取消了我的错误。我编辑了这篇文章以避免误解。请再次阅读问题,我需要传递myclass类型以构建新的泛型obj@Heberfa-我相信您能够做到这一点的唯一方法是使您的方法或类成为泛型的,并让它根据传递给它的某个参数确定类型参数。我不熟悉getIntent或getExtras,我假设它们与Android相关,所以我不确定这是否可行。我不知道getStringObjClass在做什么。底线是,您需要更多地阅读泛型是如何工作的。当您理解泛型和类型参数而不是尝试毫无意义的随机操作时,它们会更容易使用。
new DbAdapter<Object>(getApplicationContext(),ds,campos)
new DbAdapter(getApplicationContext(),ds,campos)