Java:在没有警告的情况下投射列表<! - ? - >

时间:2014-06-09 15:52:16

标签: java generics casting

假设我们有以下示例代码。

头等舱:

public class Template<T> {

    private final T val;

    public Template(T val) {
        this.val = val;
    }

    public T getVal() {
        return val;
    }
}

第二课:

import java.util.ArrayList;
import java.util.List;

public class App {

    public static void main(String[] args) {

        List<?> templates = new ArrayList<Template<?>>();

        // How can I cast this without warning?
        List<Template<?>> castedTemplates = (List<Template<?>>)templates;

        // further code...
    }
}

所以,我的问题是:如何在没有警告且没有 @SuppressWarnings(“未选中”)的情况下进行演员表?

2 个答案:

答案 0 :(得分:2)

为什么你可以将它定义为List<Template<?>> templates = new ArrayList<Template<?>>();

答案 1 :(得分:1)

你不能这样做。

这就是重点 - 编译器必须生成这些警告,以便他们警告你,你正在做的事情并不完全适用于本书。

@SuppressWarnings("unchecked")应该压制它们(如果那是你明确想要的)。

我知道这听起来太琐碎了,但这是真的。