我将尝试使用一种常见的技术从XML中创建对象。(虽然已经有库可以实现这个功能,但是自己编写似乎更快。)
我不理解编译器对泛型用法的抱怨。以下是代码示例:
感谢您对此主题的任何启示!
我不理解编译器对泛型用法的抱怨。以下是代码示例:
public void createObjects() {
List<Object1> objectOnes = new ArrayList<Object1>();
List<Object2> objectTwos = new ArrayList<Object2>();
parseObjectsToList("XmlElement1", objectOnes);
parseObjectsToList("XmlElement2", objectTwos);
}
private void parseObjectsToList(String xmlTag, List<? extends Object> targetList) {
// read Xml and create object using reflection
Object newObj = createObjectFromXml(xmlTag);
targetList.add(newObj)
/* compiler complains: "The method add(capture#2-of ? extends Object) in the type List<capture#2-of ? extends Object> is not applicable for the arguments (Object)"
*/
/* If I change method signature to parseObjectsToList(String xmlTag, List targetList)
it works fine, but generates compiler warning about raw type */
}
感谢您对此主题的任何启示!
List<?>
与List<? extends Object>
存在相同的问题。通配符意味着List
具有类型参数,但是该参数是未知的。因此,向其中添加任何元素都可能会“污染”集合并导致错误类型的元素存在。 - erickson