不确定问题和我的实际问题是否意味着同样的事情......
我的地图如下:
Map<String, Animal> animalMap= new HashMap<String, Animal>;
Animal lion = new Animal();
Animal elephant = new Animal();
Animal cheetah = new Animal();
animalMap.put("lion", lion);
animalMap.put("elephant", elephant);
animalMap.put("cheetah", cheetah);
好像我可以访问对象的“名称”
现在我想打印如下语句:
“狮子跳上了大象!”或者“猎豹跳上了大象!”
当我调用一个函数
时lion.jump(elephant);
或
cheetah.jump(elephant);
System.out.println("The " + lion + " jumped on the " + elephant + "!");
System.out.println("The " + cheetah + " jumped on the " + elephant + "!");
答案 0 :(得分:2)
你不需要HashMap。相反,Java类可以覆盖toString方法。执行此操作时,对象将自动转换为字符串。
public class Elephant{
private String name;
public Elephant(String name){
this.name = name;
}
@Override
public String toString() {
return "this elephant is named" + this.name;
}
}
如果要将其添加到大象类中,以下内容将在新大象对象上调用toString。
Elephant e = new Elephant("steve");
System.out.println(e);
答案 1 :(得分:1)
我不确定你要做什么,但我想你想保留一张反向地图,这样你就可以进行反向查找。
Map<Animal,String> animalMapReverse= new HashMap<>();
Animal lion = new Animal();
Animal elephant = new Animal();
Animal cheetah = new Animal();
animalMapReverse.put(lion,"lion");
animalMapReverse.put(elephant,"elephant");
animalMapReverse.put(cheetah,"cheetah");
鉴于此代码,您可以这样做:
System.out.println("The " + animalMapReverse.get(lion) +
" jumped on the " + animalMapReverse.get(elephant) + "!");
答案 2 :(得分:0)
我也认为你不需要HashMap
。
更像是,你需要
public class Animal {
private String name;
public Animal(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
然后你就像使用它一样:
Animal lion = new Animal("lion");
Animal elephant = new Animal("elephant");
System.out.println(lion.getName() + " jumps over " + elephant.getName());
答案 3 :(得分:0)
您可以保留地图,这样您就可以通过字符串名称查找动物。
但请遵循Mateva的建议,并在您的Animal类中添加String name
。
地图可以在Animal中,您可以
public class Animal {
private static Map<String,Animal> name2animal = ...;
private String name;
public Animal( String n ){
name = n;
name2animal.put( n, this );
}
等