Sto utilizzando Amazon Web Services SDK per Java per DynamoDB; cercando di bastare l'interfaccia per @DynamoDBMarshalling:Creazione di un DynamoDBMarshalling generale per le enumerazioni
Class<? extends DynamoDBMarshaller<? extends Object>> marshallerClass();
Costruisco una marshaller che riceve ogni 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);
}
}
Il problema è che quando sto cercando di usare l'annotazione sul mio campo che posso 't capirlo:
public static enum MyEnum {BLA, BLA2}
@DynamoDBMarshalling(marshallerClass=EnumMarshaller<MyEnum>.class)
public MyEnum getStatus()
{
return status;
}
non posso chiamare .class su un tipo generico e alcuni altri tentativi si avvicinò diversi errori. Sto iniziando a pensare che sia impossibile con contratto di Amazon ...
mentre questo approccio solleva alcuni avvertimenti (sia rawTypes che type safety), funziona. –
Purtroppo non riesco a testare questa classe come "marshaller.unmarshall (MyEnum.class, MyEnum.SOMETHING)" non viene compilato. Classe richiesta come 1 ° parametro. –
GuiSim
A partire dalla versione 1.10.59, 'aws-java-sdk' ora fornisce un [' AbstractEnumMarshaller'] (https://github.com/aws/aws-sdk-java/blob/199fba92dd0cdf4133f4aa5b08cfc10a11c27b31/aws-java-sdk -dynamodb/src/main/java/com/amazonaws/services/dynamodbv2/datamodeling/AbstractEnumMarshaller.java) classe che è una versione più robusta di questa risposta. – cyfur01