繁体   English   中英

将 class 作为参数传递给另一个 class Java

[英]Pass a class as argument to another class Java

我在 package myApp 中使用用 POJO 编写的数据 class。 我有另一个 Package UtilLibrary,我已将其作为 jar 文件导入到 package myApp。

我通过硬编码数据类在 UtilLibrary 中开发了一种方法,现在我需要删除它,为此我正在寻找将数据 class 作为参数传递的解决方案。 下面是一个示例代码,非常感谢任何帮助。

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";
    }
}

在上面的代码中,我需要删除导入语句 - 因此将 TestTable 作为 object 传递给 putBatchRecords。 删除语句显示以下错误。

在此处输入图像描述

您可以这样更改您的代码:将 class 名称替换为完全限定的 class 名称。 然后你不需要导入那个 class。

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

但不清楚为什么需要删除该导入。 它不会使您的代码在运行时表现不同,也不会使其更易于阅读。 因此,只有当您想消除与另一个TestTable class 的名称冲突时,删除这样的导入才有意义。

我坚信您不想针对那个 class 名称进行硬编码。 使用公共基础 class 或接口代替。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM