为枚举构建一个通用的DynamoDBMarshalling

我正在使用Amazon Web Services SDK for Java for DynamoDB; 试图满足@DynamoDBMarshalling的界面:

Class<? extends DynamoDBMarshaller> marshallerClass(); 

我建立了一个接收任何枚举的编组器:

 public class EnumMarshaller<T extends Enum> implements DynamoDBMarshaller { @Override public String marshall(T getterReturnResult) { return getterReturnResult.toString(); } @Override public T unmarshall(Class clazz, String obj) { return Enum.valueOf(clazz, obj); } } 

问题是当我尝试在我的字段上使用注释时,我无法弄清楚:

 public static enum MyEnum {BLA, BLA2} @DynamoDBMarshalling(marshallerClass=EnumMarshaller.class) public MyEnum getStatus() { return status; } 

我无法在generics类型上调用.class,而其他一些尝试则出现了不同的错误。 我开始认为亚马逊的合同是不可能的……

以下对我来说很好:

马歇尔:

 public class EnumMarshaller implements DynamoDBMarshaller { @Override public String marshall(Enum getterReturnResult) { return getterReturnResult.name(); } @Override public Enum unmarshall(Class clazz, String obj) { return Enum.valueOf(clazz, obj); } } 

在我的带有枚举的表类中:

 @DynamoDBMarshalling(marshallerClass=EnumMarshaller.class) @DynamoDBAttribute(attributeName = "MyEnum") public MyEnum getMyEnum() { return myEnum; } 

我通过使用特定的类类型对JsonMarshaller进行子类化来解决这个问题:

 public class FooMarshaller extends JsonMarshaller { // No impl required } 

然后将编组注释添加到数据属性,如:

 @DynamoDBMarshalling(marshallerClass = FooMarshaller.class) public Set getFoos() { return foos; } 

如果你必须添加许多类类型,那就太痛苦了,但它确实有效。