Tôi đang sử dụng Amazon Web Services SDK cho Java cho DynamoDB; cố gắng để đủ giao diện cho @DynamoDBMarshalling:Xây dựng một DynamoDBMarshalling chung cho enums
Class<? extends DynamoDBMarshaller<? extends Object>> marshallerClass();
tôi xây dựng một marshaller tiếp nhận bất kỳ Enum:
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);
}
}
Vấn đề là khi tôi đang cố gắng sử dụng các chú thích trên sân của tôi, tôi có thể không tìm ra:
public static enum MyEnum {BLA, BLA2}
@DynamoDBMarshalling(marshallerClass=EnumMarshaller<MyEnum>.class)
public MyEnum getStatus()
{
return status;
}
Tôi không thể gọi .class trên loại chung và một số lần thử khác xuất hiện các lỗi khác nhau. tôi bắt đầu nghĩ rằng nó không thể với hợp đồng của Amazon ...
trong khi phương pháp này làm tăng một số cảnh báo (cả rawTypes và an toàn loại), nó hoạt động. –
Rất tiếc, tôi không thể kiểm tra đơn vị lớp này vì 'marshaller.unmarshall (MyEnum.class, MyEnum.SOMETHING)' không biên dịch. Lớp bắt buộc làm thông số đầu tiên. –
GuiSim
Kể từ phiên bản 1.10.59, 'aws-java-sdk' hiện cung cấp ['AbstractEnumMarshaller'] (https://github.com/aws/aws-sdk-java/blob/199fba92dd0cdf4133f4aa5b08cfc10a11c27b31/aws-java-sdk -dynamodb/src/main/java/com/amazonaws/services/dynamodbv2/datamodeling/AbstractEnumMarshaller.java) là một phiên bản mạnh mẽ hơn của câu trả lời này. – cyfur01