2012-07-24 19 views
0

我有这样的领域:我如何在Guice中绑定这种类型?

@Inject(optional=true) 
@Named(NAMED_ERROR_HANDLER) 
private PolymorphicDispatcher.ErrorHandler<IScope> errorHandler = new PolymorphicDispatcher.NullErrorHandler<IScope>(); 

,我需要覆盖默认绑定(NullErrorHandler)。我怎么做?

+0

你的意思是Guice? – 2012-07-24 14:58:40

+0

'PolymorphicDispatcher'尖叫Xtext。对? – 2012-07-24 15:07:44

+0

@LouisWasserman:固定标签。 – 2012-07-24 15:13:46

回答

1

我没有PolymorphicDispatcher.ErrorHandler和船上的儿子,但这种结合应该做的工作:

bind(new TypeLiteral<PolymorphicDispatcher.ErrorHandler<IScope>>(){}) 
    .annotatedWith(Names.named(NAMED_ERROR_HANDLER)) 
    .to(MyImpl.class); 

MyImpl因为这样的事情:

public class MyImpl implements PolymorphicDispatcher.ErrorHandler<IScope> { 
    // methods from interface 
} 

的基本原理是解释here当你搜索TypeLiteral。 (对不起,没有HTML-ID或锚点附近的部分)。

+0

谢谢,这是有效的。在我的代码中,我使用了'Types.newParameterizedType(PolymorphicDispatcher.class,PolymorphicDispatcher.ErrorHandler.class,IScope.class)',但那不匹配。任何想法为什么? – 2012-07-25 08:32:52

+0

您的评论中的类型匹配(使用一些缩写)'PD '但您需要'PD.EH '。所以删除第一个参数也应该起作用。另请注意,“EH”不是班级,更不用说是内部班级。它只是一个界面。对于这种情况,“PD”只是另一个命名空间,但不属于“EH”的_generic_类型。 – 2012-07-25 08:58:04