java - 为枚举构建一个通用的 DynamoDB 编码

标签 java generics annotations amazon-web-services amazon-dynamodb

我正在为 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/

相关文章:

java - 实现参数化接口(interface)

Java如何将加载的类参数类型作为泛型参数传递?

pdf - 如何在iOS11的PDFKit中添加图片标注

java - 使用cglib实现注解

跳过 Java 初始化字节码

c# - 无法使用 JRE 7u51 在 Internet Explorer 11 中运行 Java 小程序

java - 如何从列表中分配一个数字 - JDBC JAVA SQL

c# - 如何在 Java 中编写泛型方法

java - Java Aspect 是否可以参数化

java - 保存稍后可以导入数据库的 IDataset