Java 如何在类型中转换类?
我的android应用程序中有以下代码: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
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)