【问题标题】:Creating Constructor in Java - Using "Options" as Parameter在 Java 中创建构造函数 - 使用“选项”作为参数
【发布时间】:2014-02-22 23:17:20
【问题描述】:

我正在尝试在 Java 中创建一个将“选项”作为参数的对象。

我更熟悉 javascript - 我会这样写。

function Person(options) {
    for (var prop in options) {
        this[prop] = options[prop];
    }

    var registerUser = function() {
        console.log(options.name);
    }

    registerUser();
}

var chris = new Person({
    name: 'Chris',
    age: '23'
});

var molly = new Person({
    name: 'molly',
    age: '41'
});
  • java 支持这个吗?

~~ 先谢谢了

【问题讨论】:

  • 你对options的定义是什么?有什么参数吗?
  • 正确,this[prop] = options[prop] 将获取该实例的属性和值

标签: java javascript object parameters constructor


【解决方案1】:

不,Java 在这些方面有点冗长 - 您的 Options 类必须是预定义的,并且您需要一个一个地分配每个属性。通常在 Java 中你会有一个 Builder。对于这种特殊情况,它看起来有点矫枉过正,但它可以让您拥有一个不可变的Person,您可以使用构建器进行配置。

另一个更hacky的选项是使用反射或来自apache commons-beanutils的BeanUtils/PropertyUtils。所以你传递一个Map<String, Object>,然后迭代映射并将每个属性设置为Person 对象。

构建器可能如下所示:

public class PersonBuilder {
   private String name;
   private int age;

   public PersonBuilder withName(String name) {
      this.name = name;
      return this;
   }

   public PersonBuilder withAge(int age) {
      this.age = age;
      return this;
   }

   public Person build() {
       return new Person(this);
   }
}

public class Person {
   private String age;
   private String name;

   public Person(PersonBuilder builder) {
      //assign properties one by one
   }
}

【讨论】:

    【解决方案2】:

    您在寻找可变参数吗?比如:

    public Person(String... args){
       String name = args[0];
       String x = args[1];
    }
    
    Person p = new Person("Billy", "testing");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-29
      • 2015-12-31
      • 1970-01-01
      • 2021-03-12
      • 2012-02-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多