2010-07-10 3 views
0

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


КОД (Не работает код - 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(); 

} 
} 

ОШИБКА

wrong number of type arguments; required 2 

wrong number of type arguments; required 2 


РАБОЧИЙ КОД (Для 2 струнных (имя, PhoneNumber))


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 атрибутов, как имя , телефон, пол, возраст, адрес. Если кто-то может помочь мне скомпилировать код в верхней части вопроса, я смогу выяснить остальное.

Благодаря

+0

Я столкнулся с этой ошибкой при помещении неправильного объекта в объявление generics. Это должно быть '>', но на самом деле было '>'. Это сбивало с толку, потому что компилятор не указывал на правильное положение в строке. Это был один из многих параметров в сигнатуре функции, и компилятор указал на начало строки. – aliteralmind

ответ

7

Вы не можете просто добавлять параметры типа произвольно родовых типов - они определяются с определенным числом, и должны использовать, что многие (без учета сырьевых видов). Параметры типа имеют конкретные значения для реализации - как класс 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); 
Смежные вопросы