Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java.util.Map时出现编译问题_Java_Parameters_Map_Parameterized - Fatal编程技术网

使用java.util.Map时出现编译问题

使用java.util.Map时出现编译问题,java,parameters,map,parameterized,Java,Parameters,Map,Parameterized,我正在试图编译这个程序。它适用于2个字符串(姓名、电话号码),但不适用于3个字符串(姓名、电话号码和性别) 代码(非工作代码-3个字符串(姓名、电话号码和性别)) 工作代码(用于两个字符串(姓名、电话号码)) import java.util.Map; 导入java.util.TreeMap; 公共课{ 字符串名称,电话; 公营机构(){ } 公共静态void testMap(){ Map theMap=newtreemap(); //还可以使用新的HashMap() 地图放置(“罗杰

我正在试图编译这个程序。它适用于2个字符串(姓名、电话号码),但不适用于3个字符串(姓名、电话号码和性别)


代码(非工作代码-3个字符串(姓名、电话号码和性别))




工作代码(用于两个字符串(姓名、电话号码))


import java.util.Map;
导入java.util.TreeMap;
公共课{
字符串名称,电话;
公营机构(){
}
公共静态void testMap(){
Map theMap=newtreemap();
//还可以使用新的HashMap()
地图放置(“罗杰M”,“090-997-2918”);
地图放置(“Jane M”,“090-997-1987”);
地图放置(“Stacy K”,“090-997-9188”);
地图放置(“Gary G”,“201-119-8765”);
地图放置(“Jane M”,“090-233-0000”);
System.out.println(“测试树映射和映射”);
系统输出打印(“Stacy K有电话”);
系统输出打印(地图获取(“Stacy K”);
系统输出打印(“\n”);
系统输出打印(“Jane M有电话”);
System.out.print(地图获取(“Jane M”);
}//testMap()
公共静态void main(字符串[]args){
testMap();
}
}

我希望代码能为大约5个属性工作,如姓名、电话、性别、年龄、地址。如果有人能帮我编译问题顶部的代码,我就可以解决剩下的问题


多亏了

您不能随意地将类型参数添加到泛型类型中-它们是用一定数量定义的,并且必须使用那么多(忽略原始类型)。类型参数对实现有特定的意义-如果调用
map.get(name)
,那么
HashMap
类如何知道您想要得到什么

您应该将所有属性封装到一个类中(例如,
Person
Contact
),然后创建一个
Map
,以从姓名映射到此人。例如:

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);
公共枚举性别
{
女,男;;
}
公开期末班学员
{
私有最终字符串名;
私人最终性别;
私人最终出生日期;
私有最终字符串地址;
专用终串电话;
公众人物(字符串名称、性别、出生日期、,
字符串地址,字符串电话)
{
//你可能想在这里验证一下
this.name=名称;
这个。性别=性别;
this.dateOfBirth=出生日期;
this.address=地址;
这个电话;
}
公共字符串getName()
{
返回名称;
}
//其他物业等
}
...
Map Map=newhashmap();
Person jon=新人(“jon”,性别,男性,/*等*/);
地图放置(“Jon”,Jon);

在泛型声明中放入不正确的对象时,我遇到了这个错误。它应该是
,但实际上是
。这很混乱,因为编译器没有指向行中的正确位置。这是函数签名中的许多参数之一,编译器指向行的开头。
wrong number of type arguments; required 2

wrong number of type arguments; required 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();

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