Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java工厂方法和泛型_Java_Generics_Factory - Fatal编程技术网

java工厂方法和泛型

java工厂方法和泛型,java,generics,factory,Java,Generics,Factory,我今天一直在清理我的一些代码,这涉及到创建几个工厂类,以便根据用户输入动态创建不同的类。我发现它们都遵循几乎相同的模式: public class MyClassFactory{ private static MyClassFactory singleton = new MyClassFactory(); public static MyClassFactory getInstance(){return singleton;} private MyClassFactory

我今天一直在清理我的一些代码,这涉及到创建几个工厂类,以便根据用户输入动态创建不同的类。我发现它们都遵循几乎相同的模式:

public class MyClassFactory{
    private static MyClassFactory singleton = new MyClassFactory();
    public static MyClassFactory getInstance(){return singleton;}
    private MyClassFactory();
    private HashMap<String, Class<? extends MyClass>> instances = new HashMap<>();

    public void register(String name, Class<? extends MyClass> clazz){
        instances.put(name, clazz);
    }

    public MyClass getByName(String name) throw ...{
        return instances.get(name).newInstance();
    }
}
公共类MyClassFactory{
私有静态MyClassFactory singleton=新MyClassFactory();
公共静态MyClassFactory getInstance(){return singleton;}
私有MyClassFactory();

private HashMap首先,在SimpleFactory类声明的开头行有一个输入错误

public class SimpleFactory<T> {
公共类SimpleFactory{
然后子类将是

public class MyClassFactory extends SimpleFactory<MyClass> {
公共类MyClassFactory扩展了SimpleFactory{
考虑将基类抽象化


另一方面,如果你的应用程序非常依赖于单例,并且有任何复杂性,或者将继续增加复杂性,请考虑使用像Spring或Guice这样的IOC容器。我个人非常喜欢Spring。有人抱怨它的复杂性,但它是以模块的形式出现的,你不必使用它所有内容。我的两分钱。

您在这里的语法非常错误。我不能100%确定您想要的是什么,但以下内容很好:

public class SimpleFactory<T> {
    private HashMap<String, Class<? extends T>> instances = new HashMap<>();

    public void register(String name, Class<? extends T> clazz){
        instances.put(name, clazz);
    }
    //or possibly public <T> T getByName....
    public T getByName(String name) throws ... {
        return instances.get(name).newInstance();
    }
}

public class MyClassFactory extends SimpleFactory<MyClass> { ... }
公共类SimpleFactory{

private HashMap在打字错误上做得很好-我想我已经考虑过了,我认为我必须通过一个类类型作为泛型。干得好。
public class SimpleFactory<T> {
    private HashMap<String, Class<? extends T>> instances = new HashMap<>();

    public void register(String name, Class<? extends T> clazz){
        instances.put(name, clazz);
    }
    //or possibly public <T> T getByName....
    public T getByName(String name) throws ... {
        return instances.get(name).newInstance();
    }
}

public class MyClassFactory extends SimpleFactory<MyClass> { ... }