我覺得這是做(沒有泛型)有道:
public interface ICommon {
public void add();
}
然後Class1,Class2,Class3
,...應該實現ICommon
接口。
有了,我建議你創建一個這樣的的ClassFactory:
public class ClassFactory {
public static ICommon getInstance() {
... //do here whatever it takes to create a concrete instance of ICommon
}
最後,它應該是這樣的:
ICommon someClass = ClassFactory.getInstance();
someClass.add();
}
編輯:
而不是使用開關狀態NT你可以添加到您的ClassFactory
:
public class ClassFactory {
private static HashMap<String, String> mClassMapping = new HashMap<String, String>();
public static void registerClass(Class<?> clazz, String tag) {
String name = clazz.getName();
mClassMapping.put(tag, name);
}
public static ICommon getInstance(String tag) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
String className = mClassMapping.get(tag);
if (null == className) {
throw new ClassNotFoundException(String.format("There is no class registered for tag: %s", tag));
}
Class<?> aClass = Class.forName(className);
return (ICommon)aClass.newInstance();
}
}
最後,你可以這樣做: 在一些起點註冊類:
ClassFactory.registerClass(Class1.class, "c1");
ClassFactory.registerClass(Class2.class, "c2");
...
然後得到這樣一個實例:
String tag = ...//get tag associated to the class somehow;
ICommon classInstance = ClassFactory.getInstance(tag); //i.e tag == "c1"
classInstance.add();
調查*工廠模式*。 –