Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.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 guice能为我创建一个工厂吗?_Java_Guice_Factory - Fatal编程技术网

Java guice能为我创建一个工厂吗?

Java guice能为我创建一个工厂吗?,java,guice,factory,Java,Guice,Factory,我有以下工厂课程: public class MessagePresenterCreator implements IPresenterFactory{ @Override public MessagePresenter createPresenter(Message m) { if (m instanceof Letter) { return new LetterPresenter(); } if (m i

我有以下工厂课程:

public class MessagePresenterCreator implements IPresenterFactory{
    @Override
    public MessagePresenter createPresenter(Message m) {
        if (m instanceof Letter) {
            return new LetterPresenter();
        }
        if (m instanceof Cable) {
            return new CablePresenter();
        }
        if (m instanceof Postcard) {
            return new PostcardPresenter();
        }
        throw new IllegalArgumentException();
    }
}
我是否可以通过以下接口配置GUI以自动生成和提供此类工厂:

public interface IPresenterFactory {
    public abstract MessagePresenter createPresenter(Message m);
}

没有一个guice没有像这样的内置工厂。您可以编写一个采用
Map的工厂,没有guice没有内置这样的工厂。您可以编写一个采用
Map的工厂,我喜欢用两种方式来看待工厂——只从组件组装对象的工厂和在组装中执行条件逻辑的工厂

你们的工厂背后有逻辑。Guice无法自动执行该逻辑,因为它只是处理依赖项的连接。如果您创建的类型需要注入一定数量的依赖项,并且在创建时提供了一些东西,那么工厂的自动连接就可以通过guice来完成。这将允许您提供一个工厂接口,用@AssistedInject注释所创建类型中的任何字段,guice的扩展将创建一个工厂实现类,该类将注入注入器中绑定的任何内容,并传递这些create()参数。但在这种情况下,Guice和AssistedInject所做的一切都是将各个部分组装在一起——根据事先指定的配方将它们连接起来。它不是在最后一刻做出决定

您正在提供对象的有条件创建。那是行不通的

提到创建依赖于类型到presenter的映射的工厂-类似于:

Map<Class<? extends Message>, Class<? extends MessagePresenter>> 

Map我喜欢用两种方式来考虑工厂——只从组件组装对象的工厂和在组件中执行条件逻辑的工厂

你们的工厂背后有逻辑。Guice无法自动执行该逻辑,因为它只是处理依赖项的连接。如果您创建的类型需要注入一定数量的依赖项,并且在创建时提供了一些东西,那么工厂的自动连接就可以通过guice来完成。这将允许您提供一个工厂接口,用@AssistedInject注释所创建类型中的任何字段,guice的扩展将创建一个工厂实现类,该类将注入注入器中绑定的任何内容,并传递这些create()参数。但在这种情况下,Guice和AssistedInject所做的一切都是将各个部分组装在一起——根据事先指定的配方将它们连接起来。它不是在最后一刻做出决定

您正在提供对象的有条件创建。那是行不通的

提到创建依赖于类型到presenter的映射的工厂-类似于:

Map<Class<? extends Message>, Class<? extends MessagePresenter>> 

Map您是否在询问Guice是否能够计算出将消息转换为消息呈现者所需的逻辑?然后是否。我问是否可以配置guice模块,该模块将映射字母->LetterPresenter等,guice将为我创建工厂。您是在问guice是否可以计算出将消息转换为消息呈现者所需的逻辑?然后没有。我问我是否可以配置一个guice模块,该模块将映射Letter->LetterPresenter等,guice将为我创建工厂。hmmm,我正在尝试绑定地图,但它根本不工作。我喜欢该功能,但似乎无法使其工作。hmmm,我正试图通过绑定地图来实现这一点,但它根本不起作用。我喜欢这个功能,但似乎无法让它发挥作用。
 MapBinder<String, Snack> mapbinder = MapBinder.newMapBinder(
     binder(), 
     new TypeLiteral<Class<? extends Message>>(){}, 
     new TypeLiteral<Class<? extends MessagePresenter>>(){});
 mapbinder.addBinding(MyMessage.class).toInstance(MyMessagePresenter.class);
 mapbinder.addBinding(YourMessage.class).toInstance(YourMessagePresenter.class);