【问题标题】:Java: calling an Objectmethod with a variableJava:使用变量调用 Objectmethod
【发布时间】:2015-09-03 16:52:23
【问题描述】:

我想为以下库调用一个方法:

%nameofbookvar%.islend();

但用户应该将 nameofbookvar 分配给他想要的书。所以我想让 java 知道 nameofbookvar 是一个变量而不是对象的名称。 我该怎么做?

谢谢!!:)

【问题讨论】:

  • 什么是书?我真的无法理解你的问题。您希望用户指定变量的名称吗?为什么?
  • 我想为书库写一个程序,程序应该检查用户指定的书是否被借出。
  • 但是您不会为图书馆中的每本书都创建一个新的变量。如何在不更改代码的情况下添加新书?

标签: java object methods


【解决方案1】:

这在 Java 上确实很奇怪,因为您通常不会在没有...定义其名称的情况下创建像 %nameofbookvar% 这样的变量,对吗?

对于简单的名称/值对,您可以使用HashMap

Map<String, Book> library = new HashMap<String, Book>();
library.put("Frankenstein", new Book("Frankenstein"));
// ....
Book userSearchedBook = library.get("Frankenstein");
userSearchedBook.isLend();

当然,你需要一个Book 类:

public class Book {
    private final String title;
    private boolean lend;

    public Book(String title) {
        this.title = title;
    }
    //...
    public boolean isLend() {
        return isLend;
    }
}

【讨论】:

  • 我想创建“真实世界”图书馆拥有的书籍的对象,然后让用户在我要编写的代码中指定他想要的书:
  • 抱歉,按错键。 :) 我想创建“真实世界”图书馆拥有的书籍的对象,然后让用户指定他想要的书,所以在代码中我会让用户使用用户输入定义变量。所以变量的名称不应该改变,而是内容,我希望 Java 使用变量的内容作为对象的名称
【解决方案2】:

您可以将图书馆中的所有书籍存储在 Map 中,其中键是用户想要的书籍的名称,映射的值是属于相关书籍的 Book 对象。对于不同类型的 Map,请参阅 Map specification 中的实现类,并确定哪种最适合您的需求。

public class Library {
    private HashMap<String, Book> collection;

    public Library() {
        collection = new HashMap<>();
    }

    public Book getBook(String name) {
        return collection.get(name);
    }

    public void addBook(String name, Book book) {
        collection.put(name, book);
    }
}

public class Book {
    private boolean isLend;

    public boolean isLend() {
        return isLend;
    }
}

然后您可以在库对象上调用以下内容

Library library = new Library(); // Don't forget to add books
library.getBook(%nameofbookvar%).isLend();

【讨论】:

    【解决方案3】:
    Book variable = BookStore.get(theBookTheUserWants);
    variable.isLend();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-27
      • 1970-01-01
      • 2011-05-07
      • 2015-12-08
      • 2017-12-05
      • 1970-01-01
      相关资源
      最近更新 更多