【问题标题】:Pass a class as argument to another class Java将一个类作为参数传递给另一个类 Java
【发布时间】:2023-01-18 23:19:42
【问题描述】:

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

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

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 作为对象传递给 putBatchRecords。删除语句显示以下错误。

【问题讨论】:

  • 即使您只使用类的类型,如果该类不是“基本对象”,可以这么说,比如 String 或 Integer,那么您需要导入它。每个不在同一包和级别中的class都需要它。话虽这么说,你为什么需要删除import声明?你确定你不是在尝试使用泛型吗?
  • 如果您在代码中使用完全限定的类名,则不需要 import 语句。

标签: java amazon-dynamodb pojo underscore-java


【解决方案1】:

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

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 类的名称冲突时,删除一个这样的导入才有意义。

我坚信您不想针对那个类名进行硬编码。请改用通用基类或接口。

【讨论】:

  • 我认为你错过了重点。这是关于使类成为方法的参数而不是对其进行硬编码。
  • 同时有同样的想法。我加了一段。
猜你喜欢
  • 2012-10-18
  • 2020-03-14
  • 2013-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-31
  • 1970-01-01
相关资源
最近更新 更多