You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何将数据类作为参数传入方法以移除硬编码依赖

问题描述
  • 场景:myApp包内有POJO编写的数据类,已将UtilLibrary包作为Jar导入myApp
  • 需求:移除UtilLibrary中Sample类putBatchRecords方法对TestTable类的硬编码,改为通过传入数据类实现,同时删除对应的import语句
  • 问题:修改后出现编译错误

原硬编码代码:

import com.package.dataclasses.TestTable;

public class Sample {
    public String putBatchRecords(DynamoDbEnhancedClient enhancedClient, Object tableObj) {
        try {
            DynamoDbTable<TestTable> objTableMappedClass = enhancedClient.table("Test_Table", TableSchema.fromBean(TestTable.class));
            BatchWriteItemEnhancedRequest batchWriteItemEnhancedRequest = BatchWriteItemEnhancedRequest.builder()
                    .writeBatches(
                            WriteBatch.builder(TestTable.class)
                                    .mappedTableResource(objTableMappedClass)
                                    .addPutItem(builder -> builder.item((TestTable) tableObj))
                                    .build()
                    )
                    .build();
            enhancedClient.batchWriteItem(batchWriteItemEnhancedRequest);
            }
        } catch (DynamoDbException e) {
            System.err.println(e.getMessage());
            System.exit(1);
        }
        return "Batch write successful";
    }
}
解决方案

通过泛型实现方法的通用化,彻底解除对具体数据类的硬编码依赖,修改后的代码如下:

import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClient;
import software.amazon.awssdk.enhanced.dynamodb.DynamoDbTable;
import software.amazon.awssdk.enhanced.dynamodb.TableSchema;
import software.amazon.awssdk.enhanced.dynamodb.model.BatchWriteItemEnhancedRequest;
import software.amazon.awssdk.enhanced.dynamodb.model.WriteBatch;
import software.amazon.awssdk.services.dynamodb.model.DynamoDbException;

public class Sample {
    // 新增泛型参数T,适配任意符合DynamoDB要求的POJO数据类
    public <T> String putBatchRecords(DynamoDbEnhancedClient enhancedClient, 
                                      Class<T> dataClass, 
                                      T tableObj,
                                      String tableName) {
        try {
            // 用泛型参数替代硬编码的TestTable
            DynamoDbTable<T> objTableMappedClass = enhancedClient.table(tableName, TableSchema.fromBean(dataClass));
            BatchWriteItemEnhancedRequest batchWriteItemEnhancedRequest = BatchWriteItemEnhancedRequest.builder()
                    .writeBatches(
                            WriteBatch.builder(dataClass)
                                    .mappedTableResource(objTableMappedClass)
                                    .addPutItem(builder -> builder.item(tableObj))
                                    .build()
                    )
                    .build();
            enhancedClient.batchWriteItem(batchWriteItemEnhancedRequest);
        } catch (DynamoDbException e) {
            System.err.println(e.getMessage());
            System.exit(1);
        }
        return "Batch write successful";
    }
}

关键修改点说明

  • 新增泛型<T>:让方法支持任意类型的POJO数据类,无需硬编码具体类
  • 新增Class<T> dataClass参数:动态获取数据类的类型信息,替代原来的TestTable.class
  • 新增String tableName参数:将硬编码的表名改为可配置,进一步提升通用性
  • 移除强制类型转换(TestTable) tableObj:通过泛型保证类型安全,避免类型转换异常
  • 删除对TestTable的import语句:彻底解除对该类的依赖

myApp中的调用示例

假设你的数据类是TestTable,调用时传入对应参数即可:

// 初始化DynamoDbEnhancedClient
DynamoDbEnhancedClient enhancedClient = DynamoDbEnhancedClient.create();
// 实例化数据类对象并设置属性
TestTable testTableObj = new TestTable();
// ...设置testTableObj的属性

// 调用通用方法
Sample sample = new Sample();
sample.putBatchRecords(enhancedClient, TestTable.class, testTableObj, "Test_Table");

内容的提问来源于stack exchange,提问作者Praha Murali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 13:25:16