您不必使用任何第三方库,因为具有反射。此方法将为您完成所有操作,并使没有问题:Java
UI
for(String s : arrayWithNames){
View view = createViewInstance(0, s);
if(view instance of View){
//handle if it is view
}else{
//this is viewgroup
}
}
和:createViewInstance()
private View createViewInstance(String name){
View view = null;
try{
if(name.equalsIgnoreCase("View"){ // if it is view
Class viewClass = Class.forName("android.view." + name);
view = (View) viewClass.getConstructor(Context.class).newInstance(new Object[]{ctx});
}else{ // if it is widget: ImageView, RelativeLayout etc
Class viewClass = Class.forName("android.widget." + name);
view = (View) viewClass.getConstructor(Context.class).newInstance(new Object[]{ctx});
}
} catch (ClassNotFoundException | InvocationTargetException | NoSuchMethodException
| InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}
return view;
}
就是这样。你有一切来处理任何类型的.我已经测试了上面的代码并在项目中使用。它工作得很好。与其他 s 完全相同的情况。你不能用反射来创造,但你可以创造,所以基本上都是一样的。View
Object
int
Integer
它的一个问题是,除了 和 之外,还有更多的类型。但这也取决于你想创建多少种s...在给定的示例中,假设我将执行 , 、 ,然后您可以轻松扩展它。View
ViewGroup
Object
char
String
int
Object
for(String s : arrayWithNames){
if(s.equalsIgnoreCase("int")){
Integer integer = (Integer)createVarInstance(s); //ready to use. Integer, not int!
}else if(s.equalsIgnoreCase("String"){
String string = (String)createVarInstance(s);
}else if(s.equalsIgnoreCase("char"){
Character character = (Character)createVarInstance(s); //Character, not char!
}else if(s.equalsIgnoreCase("Object"){
Object object = (Object)createVarInstance(s);
}
}
由于所有这些数据类型都在同一包中,因此对我们来说要容易得多。方法:createVarInstance()
private Object createVarInstance(String name){
Object obj = null;
try{
Class varClass = Class.forName("java.lang." + name);
object = (Object) varClass.newInstance();
} catch (ClassNotFoundException | InvocationTargetException | NoSuchMethodException
| InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}
return object;
}
如果需要,可以为不同的包制作一种方法。如果将来要创建更多不同类型的变量,这些变量位于不同的包中,因此您必须检查名称或执行与 示例中的示例类似的操作。View