iT邦幫忙

0

JAVA泛型問題

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class MapTest {
public static void main(String[] args) {

     People p1 = new People("001",21);
     People p2 = new People("002",33);
     People p3 = new People("003",41);
     
     Map<String,People>map=new HashMap<>();
     map.put("001", p1);
     map.put("002", p2);
     map.put("003", p3);
     
     Set<String>keys=map.keySet();
     for(String key:keys) {
    	 System.out.println("name="+key+",age="+map.get(key));
     }

}

印出來的結果
name=001,age=People@2a139a55
name=002,age=People@15db9742
name=003,age=People@6d06d69c

想請教的地方是為何age印出來的不是p1p2p3裡面的數字呢

1 個回答

1
wrxue
iT邦新手 2 級 ‧ 2020-10-17 19:28:41
最佳解答

這跟泛型無關

map.get(key)

會拿出People物件,阿print一個物件就是會顯示物件所在的記憶體位址(address),像是People@2a139a55,這是告訴你print的物件為People類別且在0x2a139a55
我猜你的People物件應該有兩個屬性name, age,所以應該改為這樣

System.out.println("name="+key+",age="+map.get(key).age);
看更多先前的回應...收起先前的回應...

感謝回答,可是我並沒有去定義age是什麼東西,所以加在後面也是說方法錯誤

wrxue iT邦新手 2 級 ‧ 2020-10-17 20:01:29 檢舉

你要看你自定義People類別內有甚麼,你沒貼出來我看不出來,只能猜測你的p1,p2,p3中的數字是存在叫做People.age的屬性裡,或許你可以貼出People類別的程式碼

public class People {
private String name;
private int age;

public People(String id, int age) {
    this.name = id;
    this.age = age;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public int getAge() {
    return age;
}

public void setAge(int age) {
    this.age = age;
}

}

感謝你的提示,剛剛加了getAge()就顯示出我要的結果了

wrxue iT邦新手 2 級 ‧ 2020-10-17 20:08:26 檢舉

你是用setter/getter,那就改成這樣囉

System.out.println("name="+key+",age="+map.get(key).getAge());
wrxue iT邦新手 2 級 ‧ 2020-10-17 20:10:04 檢舉

若問題解決可以選出最佳解答,結束這個問題~

我要發表回答

立即登入回答