java hashmap 赋值,把一个值放入在java中使用通配符的hashmap中不能赋值

I am studying Generics in java.

I made a Map and initialized with 'new HashMap>()'.

After that, I made an ArrayList to put into that variable.

However, this code can not compile.

error message is:

"The method put(String, capture#1-of ? extends List) in the type Map> is not applicable for the arguments (String, List)"

on Map.put() method.

My code is below.

package org.owls.generic.main;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

public class Main {

public static void main(String[] args) {

ArrayList tmpArr = new ArrayList();

tmpArr.add("A");

tmpArr.add("B");

List> value = new ArrayList(tmpArr);

Map> testMap = new HashMap>();

testMap.put("K", value);

}

};

I can not understand why compiler looks type, even I assigned inheritanced Class which is 'List'.

Sorry for my poor English and edit will be welcomed.

Thanks for your answer:D

解决方案

You cannot put anything except null into a generic type with the ? extends ... parameter. This is basic Generics -- since the type parameter is unknown, you cannot put anything into it because whatever you try to put is not guaranteed to be a subtype of that unknown type.

Recall the PECS (Producer extends, Consumer super) rule. ? extends can only be used for producers. Putting something in is a Consumer.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值