我试图理解Generics是如何工作的,我有这段代码来显示带有这些参数Map的newDetails类的条目。这是我的代码。
public class Map<Key,Value> {
private Map<Key, Value> entry;
public Map(){
entry = new HashMap<Key,Value>();
}
public void putEntry(Key k, Value id){
entry.put(k, id);
}
public void printMe(){
System.out.println();
for (Map.Entry<Key, Value> x: entry.entrySet()){
System.out.print(x+" ");
}
}
}
巧克力类
public class Chocolates<T> {
private List<T> listOfChocolate = new ArrayList<T>();
public Chocolates(T choc){
listOfChocolate.add(choc);
}
public void addChocolate(T getChoc){
listOfChocolate.add(getChoc);
}
public List<T> getLists(){
return listOfChocolate;
}
}
主要方法
public static void main(String[] arg){
Map<Chocolates<String>, Integer> newDetails = new Map<Chocolates<String>, Integer>();
Chocolates<String> choco = new Chocolates<String>();
newDetails.putEntry((new Chocolates<String>("Cadbury")), 1);
newDetails.putEntry((new Chocolates<String>("Hersheys")), 2);
newDetails.printMe();
}
每当我尝试运行该程序时,它只显示这个
generics.Chocolates@9931f5=1 generics.Chocolates@19ee1ac=2
如何显示像Cadbury 1和Hersheys 2这样的实际条目?
也有任何方法可以改进主方法或程序的某些部分,因为每当我添加新条目时,我总是会创建一个新对象。最初我想要做的是创建此代码的泛型版本:
Map<List<String>, Integer> newDetails = new HashMap<List<String>, Integer>();
正如有人告诉我的那样,在泛型类中实现这一行代码要好得多。有什么建议?感谢
我按照Nambari的要求编辑了Maps Class printMe Method
public void printMe(){
System.out.println();
for (Map.Entry<Key, Value> x: entry.entrySet()){
System.out.print(x.getKey()+" "+x.getValue());
}
}
输出结果为:
generics.Chocolates@9931f5 1generics.Chocolates@19ee1ac 2
但是如果按照Joao的建议添加这一行
public String toString(){
return listOfChocolate.toString();
}
输出是:
[Hersheys] 2[Cadbury] 1
感谢大家的帮助!
答案 0 :(得分:3)
覆盖Chocolate
类中的Object#toString
:
public class Chocolates<T> {
// ...
@Override
public String toString() {
return listOfChocolate.toString();
}
}
答案 1 :(得分:2)
更新printMe(..)
方法System.out
System.out.print(x.getKey() + " " + x.getValue());
编辑:
public void printMe(){
System.out.println();
for (java.util.Map.Entry<Key, Value> x: entry.entrySet()){
System.out.print(((Chocolates)x.getKey()).getLists().get(0) +" "+x.getValue());
}
}
注意:如果NPE
为空
getLists()