gpt4 book ai didi

java - 如何替换已弃用的构造函数 DynamoDBMapperFieldModel

转载 作者:行者123 更新时间:2023-12-02 01:08:54 25 4
gpt4 key购买 nike

最近,我必须维护一个用 Java 开发的旧项目(这不是我的强项),并且在编译过程中我收到了有关已弃用的 API 的警告。

经过调查,我发现已弃用的 API 是来自 AWS 的构造函数 DynamoDBMapperFieldModel。查看文档后,我没有找到任何有关新构造函数或如何通过其他方式实例化它的信息。我需要这个构造函数,因为我的类正在实现 ItemConverter 和方法 getFieldModel

下面您将找到我的类的代码片段:

    @Override
public DynamoDBMapperFieldModel getFieldModel(Method getter) {

MethodInfo fieldMeta = meta.get(getter.getDeclaringClass()).get(getter);
return new DynamoDBMapperFieldModel(getter.toString(), fieldMeta.dynamoDBAttributeType, fieldMeta.marshaller);
}

SDK版本如下:com.amazonaws:aws-java-sdk-dynamodb:1.9com.amazonaws:aws-java-sdk:1.11.15

如果您有任何疑问,请告诉我,感谢您的帮助。

最佳答案

免责声明:我的回答基于对 1.11.15 版本 found here 中的 DynamoDBMapperFieldModel 源代码的检查。 。我从未使用过这个 API,因此我的答案更像是由于没有任何其他答案而提供的见解。

除了前面提到的已弃用构造函数之外,DynamoDBMapperFieldModel 类还提供以下构造函数:

/**
* Creates a new field model instance.
* @param builder The builder.
*/
private DynamoDBMapperFieldModel(final Builder<T,V> builder) {
this.id = builder.id;
this.properties = builder.properties;
this.reflect = builder.reflect;
this.converter = builder.converter;
this.dynamoDBAttributeType = builder.dynamoDBAttributeType;
}

但是,这个构造函数是私有(private),这意味着您不能直接从类范围之外调用它。解决方案似乎是使用 DynamoDBMapperFieldModel.Builder 静态内部类来实例化 DynamoDBMapperFieldModel 对象。 class com.amazonaws.services.dynamodbv2.datamodeling.ConversionSchemas有一些这个习语的说明性示例,例如:

@Override
public DynamoDBMapperFieldModel getFieldModel(Method getter) {
//...
final StandardAnnotationMaps.FieldMap annotations = StandardAnnotationMaps.of(getter, null);
final DynamoDBMapperFieldModel.Builder builder = new DynamoDBMapperFieldModel.Builder(void.class, annotations);
builder.with(attributeType);
return builder.build();
}

这个习语很常见,通常称为 Builder Pattern .

值得注意的是,DynamoDBMapperFieldModel.Builder 内部类具有“默认可见性”(没有显式访问修饰符):

static final class Builder<T,V> {
//...
}

您可以查看this tutorial如有必要,请了解每个可见性修饰符的限制。

希望这可以帮助您找到最终的解决方案。

关于java - 如何替换已弃用的构造函数 DynamoDBMapperFieldModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57708294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com