现在我有4个类,根据以下示例中给出的情况调用常用方法。
Class1 class1 = new Class1();
Class1 class2 = new Class2();
Class1 class3 = new Class3();
Class1 class4 = new Class4();
MyEnum enum = MyEnum.valueOf(getString()); //getString() will return String "c1" or "c2" or ....
switch(s)
{
case c1 :
class1.add();
break;
case c2 :
class2.add();
break;
case c3 :
class3.add();
break;
case c4 :
class4.add();
break;
}
因为以后有可能出现新类,所以我想让类初始化和方法调用通用。请让我知道实现它的最佳方法。提前感谢您的建议。
答案 0 :(得分:3)
我认为这是一种正确的方法(没有泛型):
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();
}
修改强>
您可以将其添加到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();
答案 1 :(得分:0)
@ user1849139
1)public interface genaricInterface { public void commonMethod(); }
2)实现上面的类接口并覆盖方法
3)public Class class1实现genaricInterface { public void commonMethod(){ //在这里为class1写你的逻辑 } }
4)像上面的类一样,你可以在那之后实现java中的n个类
5)创建类似genaricInterface的实例gi = new class1();
6)调用方法gi.commonMethod();