Я хочу просмотреть каждый ключ в keySet HashMap из другого класса. Прямо сейчас это то, что у меня есть:

Admin.java

import java.util.HashMap

public class Admin {
public static HashMap<String, Person> person = new HashMap<String, Person>();

    public static void main (String [] args) {
         for (String key: person.get("James").getHashMap().keySet()) {
         System.out.println(key);
    }

}

Person.java

import java.util.HashMap

public class Person {
public static HashMap<String, Book> book = new HashMap<String, Book>();
private static String title = "";


    public Book (String titleIn) {
         title = titleIn;
    }

    public HashMap getHashMap(){
         return book;
    }


}

Думаю, я не могу этого сделать, потому что не могу использовать команды HashMap в HashMap, который не хранится в том же классе.

Могу ли я использовать другой метод? Я неправильно называю это из Admin.java?

Благодарность!

0
Jalokoh 30 Окт 2015 в 15:09

2 ответа

Лучший ответ

Ваш метод getHashMap возвращает необработанный HashMap в вашем классе Person.

Необработанные карты не параметризуются, поэтому типом их ключа неявно является Object.

Вам нужно изменить его на:

public Map<String, Book> getHashMap(){
   return book;
}

... чтобы иметь возможность ссылаться на ключ как String.

Изменить

Вам также необходимо либо изменить переменную book на экземпляр (в отличие от static), либо сделать метод getHashMap статическим.

Последнее, вероятно, не рекомендуется, поскольку оно вернет один и тот же объект для всех ваших экземпляров Person.

0
Mena 30 Окт 2015 в 12:14

Поскольку он статический и общедоступный, вам разрешено использовать его из любой точки вашего проекта. Просто пиши

Admin.person

Для бывшего

public class Person {

...
....
        public void print() {
         for (String key: Admin.person.get("James").getHashMap().keySet()) {
                 System.out.println(key);
            }

        }
   }
0
Suresh Atta 30 Окт 2015 в 12:13