私はこのケースで自分の工場を使わないようにしようとしていましたが、Guiceを使ってこれを行う方法が見つからなかったかもしれません)Guiceでは、実装でジェネリックを使用するときに、パラメータ化されたクラスの複数のインスタンスをバインドする方法はありますか?
私は、タイプDへのE:私はマッパーを注入
public class DefaultSerializationProvider<E extends ValueEntity, D extends ModelDTO> implements
SerializationProvider<E, D> {
private Mapper mapper;
private Class<D> dtoClass;
@Inject
public DefaultSerializationProvider(Class<D> dtoClass){
this.dtoClass=dtoClass;
}
@Override
public D serialize(E entity) throws MappingSerializationException {
D result=this.getNewDTOInstance();
this.mapper.map(entity, result);
return result;
}
protected D getNewDTOInstance() throws MappingSerializationException {
try{
D result=this.dtoClass.newInstance();
return result;
}catch(InvocationException ie){
throw new MappingSerializationException(ie);
}catch(IllegalAccessException iae){
throw new MappingSerializationException(iae);
}catch(InstantiationException iie){
throw new MappingSerializationException(iie);
}
}
@Inject
public void setMapper(Mapper mapper) {
this.mapper = mapper;
}
}
注:今ドーザーや反射のビットを使用して
public interface SerializationProvider<E extends ValueEntity, D extends ModelDTO> {
D serialize(E entity) throws MappingSerializationException;
}
、私はこのようになりますユニークなデフォルトクラスでこれを実装することができます。
ここで問題は、異なるペアのDefaultSerializationProviderの異なるインスタンスを提供するためにバインドする方法です。 私が避けたいのは、ジェネリックを定義する唯一の目的でサブクラスのホール束を作成することです。
私はのようにインスタンスのこの種を提供しています工場を提供することができます知っている純粋なJavaでは:
public interface SerializationProviderFactory {
public <E extends ValueEntity, D extends ModelDTO> SerializationProvider<E,D> get(Class<E> entityType, Class<D> dtoType);
}
本の非常に単純な実装は次のようになります。
public class DefaultSerializationProviderFactory implements
SerializationProviderFactory {
public static final DefaultSerializationProviderFactory INSTANCE=new DefaultSerializationProviderFactory();
@Override
public <E extends ValueEntity, D extends ModelDTO> SerializationProvider<E, D> get(
Class<E> entityType, Class<D> dtoType) {
return new DefaultSerializationProvider<E, D>(dtoType);
}
}
今の質問がされますGuiceを使用して、この種のFactoryを実装するにはどうすればよいですか? これを行うにはより良い方法がありますか?工場の
簡単なユースケースは次のようになります。私の知る限り、すべての可能なタイプの引数にDefaultSerializationProvider
をバインドする方法はありません知っているように、事前に
public MessureUnitDTO serializeUnit(MessureUnit unit){
SerializationProviderFactory factory=DefaultSerializationProviderFactory.INSTANCE;
SerializationProvider<MessureUnit, MessureUnitDTO> provider=factory.get(MessureUnit.class, MessureUnitDTO.class);
return provider.serialize(unit);
}
おかげで、 ダニエル