从另一个方法调用 HashMap 值

Call HashMap Value from Another Method

我正在尝试从另一种方法调用哈希图的值。当在 ref 中调用 TW 时,我需要打印值 1, "Twin", 200, 200 而不是 "YES"。但是请记住,我必须将 setupMuseum 保留为 private。我尝试了不同的方法,但每次都以错误告终。

  private void setupMuseum() {
        HashMap<String, MUSEUM>Museum= new HashMap<String, MUSEUM>();
        
        Museum.put("TW", new MUSEUM(1, "Twin", 200, 200)); 
    }

public String getMuseumDetails(String ref) {
        if ("TW".equals(ref) ){
            System.out.println("YES");
            
            
        }else
            return "!";
            
        return "\nNo such thing";
    }

你的setupMuseum()方法没有用。它创建了一个 Map 甚至没有 returned 并且也不是实例变量。您需要 return 创建的 Map 然后您可以打印其中的任何内容:

private Map<String, MUSEUM> setupMuseum() {
    HashMap<String, MUSEUM> Museum = new HashMap<String, MUSEUM>();
    Museum.put("TW", new MUSEUM(1, "Twin", 200, 200)); 

    return Museum;
}

然后在您的 getMuseumDetails() 方法中,您需要调用 setupMuseum() 并打印值:

public String getMuseumDetails(String ref) {
    if ("TW".equals(ref) ){
        HashMap<String, MUSEUM> museum = getMuseumDetails();
        System.out.println(museum.get("TW"));
    } else {
        return "!";
    }
    
    return "\nNo such thing";  // This is unreachable
}

这是假设两种方法都在同一个文件中,因此 setupMuseum() 可以在 getMuseumDetails() 内到达。这还假设您的 MUSEUM class 有一个适当的 toString() 实现,实际上包括它的所有属性。


作为旁注,请牢记以下几点:

  • 通常,Java中的变量遵循snakeCase,所以你应该将Museum命名为museum
  • Java classes 的名称不应为大写,因此您应将 MUSEUM 命名为 Museum.
  • 您应该努力使用 Java 接口而不是具体实现。这意味着您应该使用 Map<String, MUSEUM> Museum = new HashMap<String, MUSEUM>(); 而不是 HashMap<String, MUSEUM> Museum = new HashMap<String, MUSEUM>();,这样您就可以将变量声明为 Map(接口)而不是 HashMap(具体实现)。