gpt4 book ai didi

java - 你能用一个无类型的对象实例化一个 Java 类构造函数吗?

转载 作者:行者123 更新时间:2023-11-30 07:45:35 29 4
gpt4 key购买 nike

我有 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 个参数的列表来可靠地实例化一个类。

最佳答案

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

the reason why I want to do this is because if a class has let's say more than 10 variables to be when initialised, it's difficult to instantiate a class reliably by giving a list of let's say 10 parameters

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

1)二传手方式

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

2) builder 方式

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

但要真正避免使用容易出错的构造函数,因为参数类型可能会放错位置,而且构造调用的可读性也会受到影响。

关于java - 你能用一个无类型的对象实例化一个 Java 类构造函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51692318/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com