我认为当我重写部分代码以使其更易于维护时,我误解了HashMap的应用。
joints
是一个HashMap,包含一组由String
标识的对象:
private HashMap<String, SomeObject> joints = new HashMap(5, 1);
通过put()
方法,HashMap的种群很简单。但是我现在需要在每个方法上运行一个方法。下面的代码在第一个时期产生语法错误,但我相信它说明了我想要做的事情。
joints.("knee").someMethod(someValue);
joints.("hip").someMethod(someOtherValue);
joints.("shoulder").someMethod(someOtherValue);
joints.("neck").someMethod(someOtherValue);
joints.("elbow").someMethod(someOtherValue);
什么是有效/正确的等价物?上面提到的?我在想get()对象,从地图中删除它,修改对象,把它放回HashMap。
虽然foreach会更近一步,但这是一个没有实际意义的方法,因为someMethod()的争论对于每个对象都是不同的。
答案 0 :(得分:2)
要访问Map
中的特定值(而不是循环遍历所有值),请使用get
方法。
joints.get("knee").someMethod(someValue);
答案 1 :(得分:2)
一种不错的方法可能是使用通用方法。
首先,使用您的方法定义一个接口,该接口对于地图中的所有值都是通用的:
public interface SomeInterface {
public void someMethod();
}
然后,您可以迭代地图并为每个值调用公共方法:
public <T extends SomeInterface> void callMethodOnValues(Map<String, T> map) {
for (T value : map.values()) {
value.someMethod();
}
}
答案 2 :(得分:0)
如果从value
检索到的key
是实现someMethod()
的类的实例,那么它将是这样的:
for(String key: joints.keySet())
{
someObject obj = joints.get(key);
obj.someMethod(value);
}