当我从哈希中“getValue()”对象时,它属于SomeType,我必须将它转换为 SomeType。JVM 没有将其视为SomeType类型:
JVM对检查该对象是否为实例 SomeType表示正确。该对象上的方法getClass()也返回SomeType。
但是,当我尝试将该对象分配给声明为的变量x时
SomeType x;
我得到错误说
Type mismatch: cannot convert from Object to A.SomeType.
我通过将对象转换为SomeType来解决它,这没关系。
但是,这个例程 - 为什么我必须投射一个对象 - 一个 首先以SomeType形式出现的对象,在它在HashMap中花费了一段时间后又回到SomeType?
//================
添加:代码。
下面这个给出了错误。带有评论“这条线作品”的行是一个演员和作品。
class SomeType {
private int value;
public void setValue (int value) { this.value = value; }
public int getValue () { return this.value; }
}
void doThis(int[] input) {
LinkedHashMap<Integer, SomeType> anElt = new LinkedHashMap<>();
for (Integer key:input) {
SomeType h = new SomeType();
if (anElt.containsKey(key)) {
h = anElt.get(key);
// trimmed off the rest -- nothing relevant here
} else {
h.setValue(key); // ...
}
anElt.put(key, h);
}
Set set = anElt.entrySet();
Set<SomeType> outSet = new LinkedHashSet<SomeType> ();
// Get an iterator
Iterator i = set.iterator();
while(i.hasNext()) {
Map.Entry me = (Map.Entry)i.next();
System.out.print(me.getKey() + ": ");
// SomeType h = (SomeType)(me.getValue()); // THIS LINE WORKS. -- not the one after.
SomeType h = me.getValue();
System.out.println(h.getValue());
}