【发布时间】:2018-08-05 07:29:28
【问题描述】:
我来自 Javascript 背景。我知道在Java中,要实例化一个类,您可以提供多个构造函数来设置类变量。但是,您能否为构造函数提供一个无类型对象来初始化类变量,如下所示:
public class Book {
String title;
String author;
public Book(Object data) {
this.title = data.title;
this.author = data.author;
}
}
我可以像这样实例化一个新的 Book 实例吗:
Book bookOne = new Book({ title: "Book One", author: "Author One" });
我之所以要这样做是因为如果一个类在初始化时有超过 10 个变量,那么通过给出一个假设为 10 个参数的列表来可靠地实例化一个类是很困难的。
【问题讨论】:
-
不,你不能。
Object没有title和author字段。 -
那么这意味着如果我想在实例化过程中设置 10 个类变量,我将不得不创建一个接受 10 个参数的构造函数。这是正确的吗?
-
技术上你可以,但你必须依靠反射来复制相关字段。这不是你通常在 Java 中工作的方式。
-
在 Java 中,可以为此使用 Builder pattern。它可以让你写
Book bookOne = new BookBuilder().setTitle("Book One").setAuthor("Author One").build()。您可以使用AutoValue 自动生成此类构建器。
标签: java class constructor