gpt4 book ai didi

java - 如何将类型作为变量传递?

转载 作者:行者123 更新时间:2023-12-02 01:32:55 24 4
gpt4 key购买 nike

我正在使用 DynamoDB。我想创建一个数据库适配器类(而不是在程序的各个部分中查看一堆复制/粘贴的代码),它可以执行以下操作:

DynamoDBMapper mapper = Dynamo.getMapper(SomeClassHere.TABLE_NAME);

DynamoDBQueryExpression<SomeClassHere> queryExpression = new DynamoDBQueryExpression<SomeClassHere>()
.withHashKeyValues(passedInObjectHere);

List<SomeClassHere> list = mapper.query(SomeClassHere, queryExpression);

因此 SomeClassHere 将是类的名称作为其类型,也用于映射 DynamoDBMapper 中的字段。

我想传递一个与此类似的对象参数:

public void getList(IDynamoDBModel model) {
DynamoDBMapper mapper = Dynamo.getMapper(GetTheClassTypeFromTheModel);

DynamoDBQueryExpression<GetTheClassTypeFromTheModel> queryExpression = new DynamoDBQueryExpression<GetTheClassTypeFromTheModel>()
.withHashKeyValues(model);

List<GetTheClassTypeFromTheModel> list = mapper.query(GetTheClassTypeFromTheModel, queryExpression);

}

这样,我就可以简单地:

,而不是到处复制/粘贴“保存代码”、“删除代码”、“获取项目代码”
  • 调用连接管理器
  • 从中获取与 DynamoDb 的连接
  • 将对象及其预加载值传递到适当的位置方法(保存、删除、getItem 等)

我意识到泛型是在编译时使用的,这可能是徒劳的,但我真的想清理这个继承的代码库。

最佳答案

我不熟悉 DynomoDB。

但根据我的理解,您希望从 DynamoDB 实现通用数据访问层。它可以通过通用来实现,我已经实现了下面的代码,您可以了解如何实现这一点。

请忽略 DynamoDB 规范,仅通过复制和粘贴此代码将无法工作。因此请确保进行相应的编辑。

实现DynamoTypeProvider接口(interface)。

@FunctionalInterface
public interface DynamoTypeProvider<DynamoType> {
Class<DynamoType> getDynamoType();
}

为 DynamoDB 实现通用数据访问服务,如下所示。

public abstract class DynamoQueryService<DynamoType, DynamoDBModel extends DynamoTypeProvider<DynamoType>> {

public List<DynamoType> getList(DynamoDBModel model) {
DynamoDBMapper mapper = Dynamo.getMapper(model.getDynamoType());

DynamoDBQueryExpression<DynamoType> queryExpression = new DynamoDBQueryExpression<DynamoType>()
.withHashKeyValues(model);

return mapper.query(model.getDynamoType(), queryExpression);

}

}

假设 Dynamo 类型为 UserType,DynamoDBModel 为 User。从 User 中我们应该能够获取 Dynamo DB 类型 UserType。

public class UserType {
//your code.
}

public class User implements DynamoTypeProvider<UserType>{
//your code
@Override
public Class<UserType> getDynamoType() {
return UserType.class;
}

然后实现指定模型类型的数据访问服务。这里是 UserDynamoQueryService。

 public class UserDynamoQueryService extends DynamoQueryService<UserType, User> {



}

然后你可以得到UserType为

    UserDynamoQueryService service = new UserDynamoQueryService();
List<UserType> types = service.getList(new User());

使用 Generic 你可以实现这一点。请确保相应地编辑此内容。

或者您可以尝试下面的示例。

public class DynamoQueryService { 

public <T, X> List<T> getList(X x, Class<T> tClass) {
DynamoDBMapper mapper = Dynamo.getMapper(tClass);
DynamoDBQueryExpression<T> queryExpression = new DynamoDBQueryExpression<T>()
.withHashKeyValues(x);

return mapper.query(tClass, queryExpression);
}

}

并按如下方式使用。

DynamoQueryService queryService = new DynamoQueryService();
List<UserType> userTypes = service.getList(new User(), UserType.class);

那么用户不需要实现DynamoTypeProvider。

关于java - 如何将类型作为变量传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57545872/

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