首页 > 解决方案 > java:如何使用String值作为类名和变量名

问题描述

我有字符串变量,如

String android1="TextInputLayout";
String android1var = "customTextInputLayoutemail"
String android2="TextInputEditText";
String android2var = "textInputEditTextemail"

我想创建以下代码:

CustomTextInputLayout customTextInputLayoutemail = null;
TextInputEditText textInputEditTextemail = null;

customTextInputLayoutemail = new CustomTextInputLayout(this);
customTextInputLayoutemail.setLayoutParams(new CustomTextInputLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT));

textInputEditTextemail = new TextInputEditText(this);
textInputEditTextemail.setHint("");
customTextInputLayoutemail.addView(textInputEditTextemail);
customTextInputLayoutemail.setHelperText("min "+MIN_PASSWORD_LENGTH+" characters");

我该如何更换

class Name CustomTextInputLayout with android1
class Name TextInputEditText with android2

variable Name textInputEditTextemail with android1var
variable Name customTextInputLayoutemail with android2var

标签: javaandroid

解决方案


使用反射动态创建视图。获取constructor使用getConstructor并使用newInstance方法创建实例。

示例代码:

    String android1="TextInputLayout";
    try {
        Class<?> clazz = Class.forName("android.support.design.widget." + android1);
        Constructor<?> constructor = clazz.getConstructor(Context.class);
        Object object = constructor.newInstance(getContext());

        if (object instanceof TextInputLayout) {
            TextInputLayout textInputLayout = (TextInputLayout) object;
        }else {   
        }

    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (NoSuchMethodException e) {
        e.printStackTrace();
    } catch (java.lang.InstantiationException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        e.printStackTrace();
    }

推荐阅读