Проблема компиляции при работе с java.util.Map - PullRequest
0 голосов
/ 10 июля 2010

Я пытаюсь скомпилировать эту программу. Он отлично работает для 2 строк (имя, номер телефона), но не для 3 строк (имя, номер телефона и пол).


КОД ( Не рабочий код - 3 строки (имя, номер телефона и пол) )


import java.util.Map;
import java.util.TreeMap;

public class Ann {

String name, phone;

public Ann() {
}

public static void testMap() {
    Map<String, String, String> theMap = new TreeMap<String, String,String>();
    // new HashMap<K,V>(); could also be used
    theMap.put("Roger M", "090-997-2918", "Male");
    theMap.put("Jane M", "090-997-1987", "FeMale");
    theMap.put("Stacy K", "090-997-9188", "FeMale");
    theMap.put("Gary G", "201-119-8765", "Male");
    theMap.put("Jane M", "090-233-0000", "FeMale");
    System.out.println("Testing TreeMap and Map");
    System.out.print("Stacy K has phone ");
    System.out.print(theMap.get("Stacy K"));
    System.out.print("\n");

    System.out.print("Jane M has phone ");
    System.out.print(theMap.get("Jane M"));
} // testMap()

public static void main(String[] args) {
    testMap();

}
}

ERROR

wrong number of type arguments; required 2

wrong number of type arguments; required 2


РАБОЧИЙ КОД ( Для 2 строк (имя, номер телефона) )


import java.util.Map;
import java.util.TreeMap;

public class Ann {

String name, phone;

public Ann() {
}

public static void testMap() {
    Map<String, String> theMap = new TreeMap<String, String>();
    // new HashMap<K,V>(); could also be used
    theMap.put("Roger M", "090-997-2918");
    theMap.put("Jane M", "090-997-1987");
    theMap.put("Stacy K", "090-997-9188");
    theMap.put("Gary G", "201-119-8765");
    theMap.put("Jane M", "090-233-0000");
    System.out.println("Testing TreeMap and Map");
    System.out.print("Stacy K has phone ");
    System.out.print(theMap.get("Stacy K"));
    System.out.print("\n");

    System.out.print("Jane M has phone ");
    System.out.print(theMap.get("Jane M"));
    } // testMap()

public static void main(String[] args) {
    testMap();

}
}

Я хочу, чтобы код работал примерно для 5 атрибутов, таких как имя, телефон, пол, возраст, адрес. Если кто-то может помочь мне скомпилировать код в верхней части вопроса, я могу выяснить остальное.

Спасибо

1 Ответ

7 голосов
/ 10 июля 2010

Вы не можете просто произвольно добавить параметры типа к универсальным типам - они определены с определенным числом и должны использовать их столько (без учета необработанных типов).Параметры типа имеют конкретное значение для реализации - как класс HashMap узнает, что вы хотите получить, если вы вызываете map.get(name)?

Вы должны инкапсулировать все свойства в классе (например, Person или Contact), а затем создайте Map<String, Person> для сопоставления имени с человеком.Например:

public enum Gender
{
    FEMALE, MALE;
}

public final class Person
{
    private final String name;
    private final Gender gender;
    private final Date dateOfBirth;
    private final String address;
    private final String telephone;

    public Person(String name, Gender gender, Date dateOfBirth,
                  String address, String telephone)
    {
        // You probably want to put some validation in here
        this.name = name;
        this.gender = gender;
        this.dateOfBirth = dateOfBirth;
        this.address = address;
        this.telephone = telephone;
    }

    public String getName()
    {
        return name;
    }

    // etc for the other properties
}

...

Map<String, Person> map = new HashMap<String, Person>();
Person jon = new Person("Jon", Gender.MALE, /* etc */);
map.put("Jon", jon);
...