Sht*_*itz 0 java processing iterator hashmap
我是processing.org和Java的新手.我试图将对象存储在HashMap中,然后迭代HashMap的值,调用存储对象上的方法.为了做到这一点,我假设我需要将迭代器向下转换为我的类的类型,但这会抛出一个ClassCastException("java.util.HashMap $ ValueIterator不能转换为sketch_oct27a $ MyClass").以下简化代码演示了此行为:
import java.util.*;
void setup() {
HashMap m = new HashMap();
m.put("First", new MyClass());
m.put("Second", new MyClass());
m.put("Third", new MyClass());
Iterator iter = m.values().iterator();
while (iter.hasNext()) {
((MyClass)iter).SaySomething(); // Throws ClassCastException
iter.next();
}
}
class MyClass {
void SaySomething() {
println("Something");
}
}
Run Code Online (Sandbox Code Playgroud)
如何通过迭代器调用SaySomething()方法?
这是你使用迭代器的方法:
((MyClass)iter.next()).SaySomething();
Run Code Online (Sandbox Code Playgroud)
更好的是,使用泛型,这样你根本不需要施放:
HashMap<MyClass> m = new HashMap<MyClass>();
...
Iterator<MyClass> iter = m.values().iterator();
...
iter.next().SaySomething();
Run Code Online (Sandbox Code Playgroud)
然后你甚至可以完全跳过迭代器(实际上,这种语法只是隐藏它,它仍然隐式使用):
for(MyClass element : m.values())
{
element.SaySomething();
}
Run Code Online (Sandbox Code Playgroud)