使用java.util.Map时出现编译问题
我正在试图编译这个程序。它适用于2个字符串(姓名、电话号码),但不适用于3个字符串(姓名、电话号码和性别)使用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() 地图放置(“罗杰
代码(非工作代码-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);