Java实例的变通方法

时间:2013-12-03 10:05:13

标签: java android

我在Android项目中工作,目前我需要为所有视图创建持有者。目前有很多if,我想摆脱它们。假设有所有观点的持有者

 if (v instanceof Spinner)
    {
        holder = new SpinnerHolder(v);
    }
    else if (v instanceof AdapterView)
    {
        holder = new AdapterViewHolder((AdapterView) v);
    }
    else if (v instanceof CompoundButton)
    {
        holder = new CompoundButtonHolder(v);
    }
    else if (v instanceof EditText)
    {
        holder = new TextViewHolder(v);
    }
    else if (v instanceof SeekBar)
    {
        holder = new SeekBarHolder(v);
    }
    else if (v instanceof TabHost)
    {
        holder = new TabHostHolder(v);
    }

我确定可以做类似

的事情
String simpleName = v.getClass().getSimpleName();
Class.forName("com.myproject.myholderpackage" + simpleName + "Holder");
...

但它不起作用,例如,如果有像

这样的自定义视图
public class foo extends LinearLayout
{
}
public class bar extends foo
{
}

感谢。

1 个答案:

答案 0 :(得分:4)

我创建了一个地图:Map<Class,Class> instanceToHolder,然后用一次调用该地图和一些反射代码替换那个else-if构造来运行构造函数。所以,像这样:

final Map<Class,Class> instanceToHolder = new HashMap<Class,Class>();
instanceToHolder.put(Spinner.class, SpinnerHolder.class);
// ....
Class holderClass = instanceToHolder.get(v.getClass());
Object holderObject = holderClass.getConstructor(v.getClass()).newInstance(v);