由于未经检查的投射警告而使类化为一般化

时间:2013-10-06 22:29:11

标签: java generics casting warnings

我有以下类,标记为未选中的方法会给我一个警告。他们编译/工作正常,但我感兴趣的是,如果有一种方法来生成类,因为IntelliJ IDEA正在提供我(但无法做到)删除警告。

public abstract class Attribute {

private final AttributedNode containerNode;
private boolean computationComplete;

public Attribute(AttributedNode node) {
    this.containerNode = node;
    this.computationComplete = false;
}

public AttributedNode getContainerNode() {
    return containerNode;
}

public Attribute getAttributeFromChildNode(int childIndex, AttributeNameEnum attributeName) {
    AttributedNode node = getContainerNode().getChild(childIndex);
    return node.getAttribute(attributeName);
}

public String getChildNodeText(int index) {
    return getContainerNode().getChild(index).getText();
}

@SuppressWarnings("unchecked")
public <T, E extends Attribute> List<T> getListOfChildAttributeValues(AttributeNameEnum name) {
    List<T> result = new LinkedList<>();
    for (AttributedNode node : this.getContainerNode().getChildren()) {
        E attribute = (E) node.getAttribute(name);
        result.add((T) attribute.getValue());
    }
    return result;
}

public <T extends Attribute> Object getAttributeValueFromContainer(AttributeNameEnum name) {
    return this.<T>getAttributeValueFromNode(name, this.getContainerNode());
}

public <T extends Attribute> Object getAttributeValueFromParent(AttributeNameEnum name) {
    return this.<T>getAttributeValueFromNode(name, this.getContainerNode().getParent());
}

@SuppressWarnings("unchecked")
public <T extends Attribute> Object getAttributeValueFromNode(AttributeNameEnum name, AttributedNode node) {
    T attribute = (T) node.getAttribute(name);
    return attribute.getValue();
}
// other methods eluded

P.S。我提前道歉可能是我对Generics缺乏了解。

0 个答案:

没有答案