我正在为DynamoDB使用适用于Java的Amazon Web Services SDK;想足够了@DynamoDBMarshalling接口:为枚举建立一个通用的DynamoDBMarshalling
Class<? extends DynamoDBMarshaller<? extends Object>> marshallerClass();
我建立接收任何枚举一个编组:
public class EnumMarshaller<T extends Enum<T>> implements DynamoDBMarshaller<T>
{
@Override
public String marshall(T getterReturnResult)
{
return getterReturnResult.toString();
}
@Override
public T unmarshall(Class<T> clazz, String obj)
{
return Enum.valueOf(clazz, obj);
}
}
的问题是,当我试图使用注释上我的领域我可以“T看着办吧:
public static enum MyEnum {BLA, BLA2}
@DynamoDBMarshalling(marshallerClass=EnumMarshaller<MyEnum>.class)
public MyEnum getStatus()
{
return status;
}
我不能叫的.class一个泛型类型和一些其他的尝试想出了不同的错误。 我开始认为这是不可能与亚马逊的合同......
,而这种方法引发一些警告(rawTypes和类型安全),它确实有效。 – 2013-12-08 10:50:35
可悲的是我无法单元测试这个类,因为'marshaller.unmarshall(MyEnum.class,MyEnum.SOMETHING)'不能编译。作为第一参数需要的类别。 –
GuiSim
2016-01-18 22:22:56
从版本1.10.59开始,'aws-java-sdk'现在提供['AbstractEnumMarshaller'](https://github.com/aws/aws-sdk-java/blob/199fba92dd0cdf4133f4aa5b08cfc10a11c27b31/aws-java-sdk -dynamodb/src/main/java/com/amazonaws/services/dynamodbv2/datamodeling/AbstractEnumMarshaller.java)类,这是此答案的更健壮版本。 – cyfur01 2016-07-06 19:32:49