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

Java 如何实例化泛型类并调用方法,java,generics,switch-statement,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 ....

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

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

我认为这是一种正确的方法(没有泛型):

然后
Class1、Class2、Class3
,。。。应实现
ICommon
接口

因此,我建议您创建一个类工厂,如下所示:

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();
String tag = ...//get tag associated to the class somehow; 

ICommon classInstance = ClassFactory.getInstance(tag);   //i.e tag == "c1"
classInstance.add();
最后,它看起来是这样的:

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();
String tag = ...//get tag associated to the class somehow; 

ICommon classInstance = ClassFactory.getInstance(tag);   //i.e tag == "c1"
classInstance.add();
}

编辑:

您可以将其添加到
类工厂中,而不是使用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();
    }
}
然后获得如下实例:

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();
String tag = ...//get tag associated to the class somehow; 

ICommon classInstance = ClassFactory.getInstance(tag);   //i.e tag == "c1"
classInstance.add();
@用户1849139

1) 公共接口通用接口{ 公共方法(); }

2) 将上述接口实现到类并重写该方法

3) 公共类class1实现GenariInterface{ 公共方法(){ //把你的逻辑写在这里 } }

4) 像上面的类一样,在这之后,您可以在java中实现n个类

5) 创建像genariinterface gi=new class1()这样的实例


6) 调用方法gi.commonMethod()

查看工厂模式。在getInstance(){}方法中,我还需要放置一些开关大小写或if else块来决定初始化并返回哪个类?@user1849139:创建ICommon具体实例的逻辑当然取决于您的需要