我正在为 DynamoDB 使用 Amazon Web Services SDK for Java;试图满足@DynamoDBMarshalling 的接口(interface):
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);
}
}
问题是,当我尝试在我的字段上使用注释时,我无法弄明白:
public static enum MyEnum {BLA, BLA2}
@DynamoDBMarshalling(marshallerClass=EnumMarshaller<MyEnum>.class)
public MyEnum getStatus()
{
return status;
}
我无法在通用类型上调用 .class,其他一些尝试出现了不同的错误。 我开始认为亚马逊的契约(Contract)是不可能的...
最佳答案
以下对我来说效果很好:
编码器:
public class EnumMarshaller implements DynamoDBMarshaller<Enum> {
@Override
public String marshall(Enum getterReturnResult) {
return getterReturnResult.name();
}
@Override
public Enum unmarshall(Class<Enum> clazz, String obj) {
return Enum.valueOf(clazz, obj);
}
}
在我的带有枚举的表类中:
@DynamoDBMarshalling(marshallerClass=EnumMarshaller.class)
@DynamoDBAttribute(attributeName = "MyEnum")
public MyEnum getMyEnum() {
return myEnum;
}
关于java - 为枚举构建一个通用的 DynamoDB 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10063996/