如何实例化泛型类并调用方法

时间:2014-03-04 05:49:16

标签: java generics switch-statement

现在我有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;
}

因为以后有可能出现新类,所以我想让类初始化和方法调用通用。请让我知道实现它的最佳方法。提前感谢您的建议。

2 个答案:

答案 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

,而不是使用switch语句
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();