2010-07-10 27 views
0

Je suis en train de compiler ce programme. Il fonctionne parfaitement pour 2 Strings (Nom, numéro de téléphone) Mais pas pour 3 Strings (Nom, numéro de téléphone et sexe).Problème de compilation lors de l'utilisation de java.util.Map


CODE (code de travail Non - 3 cordes (nom, numéro de téléphone et sexe))


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(); 

} 
} 

erreur

wrong number of type arguments; required 2 

wrong number of type arguments; required 2 


CODE DE TRAVAIL (Pour 2 cordes (nom, numéro de téléphone))


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(); 

} 
} 

Je veux que le code fonctionne pendant environ 5 attributs tels que le nom , téléphone, sexe, âge, adresse. Si quelqu'un peut m'aider à compiler le code en haut de la question, je peux comprendre le reste.

Merci

+0

Je suis tombé sur cette erreur lors de la mise d'un objet incorrect dans une déclaration de génériques. Il aurait dû être '>', mais était en fait '>'. C'était déroutant parce que le compilateur n'a pas indiqué la bonne position dans la ligne. C'était l'un des nombreux paramètres dans une signature de fonction, et le compilateur pointait vers le début de la ligne. – aliteralmind

Répondre

7

Vous ne pouvez pas ajouter simplement des paramètres de type arbitraire à des types génériques - ils sont définis avec un certain nombre, et doivent utiliser que beaucoup (sans tenir compte des types bruts). Les paramètres de type ont des significations spécifiques pour l'implémentation - comment la classe HashMap sait-elle ce que vous voulez sortir si vous appelez map.get(name)?

Vous devez encapsuler toutes les propriétés dans une classe (par exemple Person ou Contact), puis créer un Map<String, Person> pour mapper du nom à la personne. Par exemple:

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);