假设我正在构建一个图书馆类来跟踪我购买的图书。 我会编写如下代码来帮助我创建书籍对象(不要太在意具体细节。此代码只是为了说明我的问题):
public class MyLibrary {
String bookName = "";
String bookAuthor = "";
double purchasePrice = 0.00;
int printYear = 0;
public Book(String name, String author, double price, int year) {
this.bookName = name;
this.bookAuthor = author;
this.purchasePrice = price;
this.printYear = year;
}
}
然后我正在考虑在程序的 main() 部分使用 Scanner 对象来帮助我引入数据并创建书籍对象。 类似于:
Scanner input = new Scanner(System.in);
System.out.println("Give a book name, please: ");
String bookName = input.next();
.
. (repeat for every other argument)
.
Book book1 = new Book(bookName, etc.,);
现在,我直接在代码中创建了这个特定对象 - book1。 但是,如果我让用户创建新书,程序如何创建具有不同名称/引用的对象?
换句话说,我如何确保用户创建的新对象将依次称为 book1、book2、book3 等或用户选择的其他名称?
谢谢。
最佳答案
只需将它们存储在 HashMap<String,Book>
中并使用书名作为你的 key 。这样按书名获取一本书就变得很容易
以下是您需要的不同步骤:
创建 map
Map <String,Book> bookMap = new HashMap<String,Book>();
将一本书添加到 map :
String bookName = input.next();
Book book1 = new Book(bookName, etc.,);
bookMap.put(bookName,book1);
然后按标题将书从 map 中取出:
Book foundBook = bookMap.get(bookName);
可以通过 keySet method 获取存储在 map 中的书籍列表。 :
for (String title : bookMap.keySet()) {
...
}
Oracle tutorial on Collections是开始学习更多内容的好地方,集合在几乎所有程序中都非常重要,学习利用它们的所有可能性非常有用。
编辑:只是为了澄清一点,我想用我的答案向您指出:Java 不允许您动态创建对象名称(标识符不能在运行时突然弹出)。当您想要动态创建和保留(存储)对象时,您可以使用 Java 提供的集合类型之一。标准 API 中有多种集合类型可供选择,可以在 in the tutorial 找到所提供的“子系列”的快速介绍。 。现在,因为我假设您希望通过用户输入的属性来搜索存储的项目,所以我建议使用 map ,并使用书名作为键。当然,您可以选择一个列表,但在列表中,项目是编号的,按标题搜索将迫使您迭代列表并检查每个存储项目的标题,直到找到正确的书为止。在许多情况下,这不是很有效,并且它迫使您编写更多代码。
这并不意味着您应该使用 HashMap 来处理所有事情。恰恰相反,您需要了解所有提供的接口(interface)的优点和缺点,以便能够编写最佳代码。我希望我的帖子为您指明了正确的方向。
关于java - 使用不同名称创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16841890/