您可以使用无类型对象实例化Java类构造函数吗?

时间:2018-08-05 07:29:29

标签: java class constructor

我来自Java语言背景。我了解在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​​个参数的列表很难可靠地实例化一个类。

1 个答案:

答案 0 :(得分:3)

您可以通过依赖JSON API并通过指定String而不是Object作为参数来实现。
但这不是类型安全的,它是Java中强类型的反模式。
请注意,当您在JavaScript前端和Java后端之间进行通信时,当然可以接受Java中的JSON。但通常我们不直接操作JSON。它在特定类的实例中反序列化,该字段表示由JSON传输的信息。

  

我要这样做的原因是因为如果一个班级让我们说   初始化时有10个以上的变量,很难   通过给出10的列表可靠地实例化一个类   参数

具有10个参数的类构造函数也不是一种好的模式。
在某些情况下,为一个实例设置10个字段可能是可以接受的:尤其是因为该类仅表示数据结构。
在这种情况下,设置对象字段的最佳方法是使用设置器或构建器。

1)设置方式

Book b = new Book();
b.setTitle(...);
b.setAuthor(...);

2)生成器方式

Book b = new Book.BookBuilder()
                 .withTitle(...)
                 .withAuthor(...)
                 .build();

但实际上要避免由于参数类型可能放错位置以及构造调用的可读性而容易出错的构造函数。