java - 避免硬连线现场访问

标签 java dynamic field

我想重构我的代码,因为它包含冗余的类声明。

我有一个 ContainerClass1 类型的类。假设类类型仅包含名为“content”的 int 变量的字段。

ContainerFiller1 类型的另一个类包含一个方法,该方法将 ContainerClass1 的实例作为参数并将字段设置为特定值。 ContainerFiller1 看起来像这样:

 public class ContainerFiller1 {

    public void fill( ContainerClass object_A ) {
        object_A.content = 99;      
    }

 }

所以我使用点符号来声明在哪里可以找到该字段(在本例中是在 object_A 中)。

我还有另外八个对象作为类 ContainerClass (ContainerClass object_B, ContainerClass object_C, ContainerClass object_D, etc.) 的实例.

这是我的问题:object_A.content = 99是硬连线的,因此在点表示法中,我无法将对象名称作为变量来调整到该字段的路径。作为解决方法,我声明了九个单独的 ContainerFiller-Classes ( ContainerFiller1, …, ContainerFiller9)每个人都有不同的领域设置者。例如 ContainerFiller2包含一个硬连线 setter object_B.content = 99 .

我想摆脱多余的类并创建一个 ContainerFiller 类型的通用类从他们当中。有没有办法以某种方式更改字段 setter 概念,我可以引用 fill(ContainerClass anyObject) 的参数列表中的对象名称并动态调整字段 setter ?也欢迎对点表示法的替代方案提出建议。

提前致谢

雷克斯

最佳答案

您可以在构造函数中使用参数:

 public class ContainerFiller {
    private amount;

    public ContainerFiller(int amount) {
        this.amount = amount
    }

    public void fill( ContainerClass container ) {
        container.content = this.amount;      
    }
 }

然后像这样使用它:

ContinerFiller fillerA = new ContainerFiller(99)
fillerA.fill(someContainer)

关于java - 避免硬连线现场访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45284121/

相关文章:

php - 如何在两个 mySQL 表之间创建 "link"?

mysql - 如何将 MySql 表导出/转储到文本文件中,包括字段名称(也称为标题或列名称)

java - 如何查找学生Bydate (findByDate)

java - AssertionError - 虚数和实数加法器

css - 具有绝对位置的div中的水平居中动态图像

javascript - JQuery - 查找动态 ID 的值

database - 从 PostgreSQL 中的函数创建动态表

java - JSON 数组获取长度

java - TimeZone - getAvailableIDs() - 仅过滤 tzdb 时区

python - 从 Python 文本文件中的字段中提取数据