java - 使用不同名称创建对象

标签 java

假设我正在构建一个图书馆类来跟踪我购买的图书。 我会编写如下代码来帮助我创建书籍对象(不要太在意具体细节。此代码只是为了说明我的问题):

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/

相关文章:

java - 响应式 Spring Boot API 封装 Elasticsearch 的异步批量索引

java - 使用纯 Java 和 Springboot 在 Vaadin 中更改 FavIcon

java - Hibernate 5.0.2 与 Sqlite — 由于错误而无法使其工作

java - 将组与 TestNG Factory 一起使用

Java从文件读取字母表到多维数组

java - 如何创建自定义方法以在 Spring 安全表达式语言注释中使用

java - 我是否需要为多线程 Java GRPC (1.1.2) 客户端汇集 ManagedChannel 实例?

java - 如何在Spring运行时启用/禁用CSRF?

java - 简单的登录 servlet 不提供输出

java - 简单的 Java 桌面应用程序 : Config files and where to put them