这是我用来保存父母的通用儿童列表的代码的简化版本。请原谅我不得不手动重写而不是复制过去,没有办法从有问题的机器上复制。
MyObject<childType extends MyObject> {}
public class Model{
HashMap<MyObject, Set<MyObject>> store= new HashMap<MyObject, Set<MyObject>>()
public <childType extends MyObject> Set<childType> getChildren(MyObject<childType> parent)
{
return (Set<childType>) store.get(parent);
}
public void <T extends MyObject<?>> addChild(MyObject<T> parent, T child){
Set<MyObject> childSet=store.get(parent);
if(childSet==null){
childSet=new Set<MyObject>();
store.put(parent, childSet);
}
childSet.add(child);
}
这在 Eclipse 中构建没有问题。但是,如果我清理我的类文件并运行 maven 安装,我会收到以下错误:
the parameter childType is not within its bound
错误发生在 getChildren 上的定义上。尽管在我对商店进行参数化并在调用商店的类中强制转换为 Set 之前,我以前遇到过一个不同但相似的问题。
如果我不进行投射,我理解为什么一般会发生这样的异常。让我感到困惑的是我正在铸造。我不明白为什么它会抛出错误并停止编译,而不是接受演员表作为我说的“相信我,这是正确的”并继续前进。
如果这很重要,我相信我正在使用 mavin-compile-pluging 1.6 版。
附言。我不知道为什么我的代码示例的格式如此丑陋。如果有人可以修复它或告诉我如何修复它,我将不胜感激。我以前从来没有遇到过这个问题...