簡體   English   中英

如何實例化泛型類並調用方法

[英]How to instantiate generic class and call a method

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

由於以后可能會出現新的類,因此我想使類初始化和方法調用通用。 請讓我知道實現此目標的最佳方法。 在此先感謝您的建議。

我認為這是一種正確的方法(沒有泛型):

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();

}

編輯:

除了使用switch語句,您還可以將其添加到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();

@ user1849139

1)公共接口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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM