在Java中使用Arrays.asList的协方差?

时间:2015-08-28 02:03:54

标签: java list types

当我创建一个列表时,我希望能够急切地初始化它;所以我使用了Arrays.asList。然而,它似乎与继承没有协变性。

例如,

List<NameValuePair> p = Arrays.asList(new BasicNameValuePair("c", coin), new BasicNameValuePair("mk_type", fromCoin));

无效(BasicNameValuePairNameValuePair的派生类)。

虽然可以像往常一样使用add

List<NameValuePair> pairs = new ArrayList<>();
pairs.add(new BasicNameValuePair("c", coin));
pairs.add(new BasicNameValuePair("mk_type", fromCoin));

由于库API仅接受List<NameValuePair>类型作为参数,因此我必须以这种方式定义pairs。有没有办法优雅地处理这个问题?

2 个答案:

答案 0 :(得分:5)

如果我理解你的问题,那么我相信你可以在Arrays.asList的方法调用中使用明确的 1 泛型类型

List<NameValuePair> p = Arrays.<NameValuePair>asList(new BasicNameValuePair(
        "c", coin), new BasicNameValuePair("mk_type", fromCoin));

<子> 1 Generic Methods (The Java Tutorials)

答案 1 :(得分:3)

你只需给它一个通用的提示:

List<NameValuePair> p = Arrays.<NameValuePair>asList(new BasicNameValuePair("c", coin), new BasicNameValuePair("mk_type", fromCoin));