繁体   English   中英

将字段名称作为参数传递给Java中同一类中的方法

[英]Passing field name as an argument to a method in the same class in Java

public class ConstructorA {
  private String FieldA, FieldB, FieldC;
  public String Setter(String ArgAA, String ArgAB) {
      this.ArgAA = ArgAB;  //or ArgAA could include "this."
  }
  public String Getter(String ArgBA) {
      return ArgBA;
  }
ObjectA = new ConstructorA();
ObjectA.Setter(FieldA, "TextA");
ObjectA.Setter(FieldB, "TextB");
ObjectA.Setter(FieldC, "TextC");
System.out.printf("%s %s %s", ObjectA.Getter(FieldA), ObjectA.Getter(FieldB), ObjectA.Getter(FieldC));

我正在尝试创建通用的setter和getter(mutator和accessor)方法,这些方法可以通过将字段名称作为参数放入方法对中。 这部分是由于好奇心,但也减少了对象具有多个字段(每个字段都有自己的getter / setter)的情况的样板代码。 我正在编写的代码已在上面的代码段中进行了抽象,以显示我希望完成的工作。 如果需要任何额外的细节或说明,或者有任何歧义,请随时提出。

我认为上面的代码相当荒谬,而且可能比伪代码比Java更像伪代码,因为我认为上面的代码根本无法工作。 但是,有什么可能与上述遥远的相似? 我是Java的新手,因此对Java的功能和局限性不太熟悉。 我知道使用指针在C语言中可能会发生类似的事情?

无论如何,对于冗长的文字深表歉意,并在此先感谢您! 任何输入都是有价值的,并且非常感谢。

不要这样

如果一个类有许多吸气剂,则它的设计不好。

本质上,您将对象视为名称到值的Map 也许您的用例实际上是您需要一个从名称到值的Map

我也同意@Raedwald的观点,即太多的领域可能表明可能存在设计缺陷。 就是说,正如您的帖子所建议的那样,有一些更简便的方法可以减少代码,而不是通过反射访问字段。

一种替代方法是添加一个像Lombok这样的库,如果对字段,类,方法等应用了特殊注释,则该库将在编译时注入代码。

例如, @lombok.Data批注将为您自动创建getter,setter,toString,构造函数,哈希码和等于。 例如

@lombok.Data
public class LargePojo {
    private String a;
    private int b;
    private List<String> c;
}

然后,您可以访问现场a像这样的:

largePojo.getA()

暂无
暂无

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

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