java 泛型问题,通配符赋值,怎么解决?

xjj2000 2014-04-16 02:01:09
下面的test方法中使用了通配符,但是两句test()函数的调用都有编译错误,为什么?说是参数不适用。
该怎么解决?

class Test {
HashMap<String, List<String>> maplist1 = new HashMap<String, List<String>>();
HashMap<String, List<Integer>> maplist2 = new HashMap<String, List<Integer>>();
public void a() {
test(maplist1);
test(maplist2);
}

public void test(Map<String, List<?>> maplist) {
System.out.println("OK");
}
}
...全文
363 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
-江沐风- 2014-04-16
  • 打赏
  • 举报
回复
引用 11 楼 awajwgluiawa 的回复:
1.6的 难道版本的问题? 难道升级之后?
风_流沙 2014-04-16
  • 打赏
  • 举报
回复
学习了。。。。
Kenzson 2014-04-16
  • 打赏
  • 举报
回复
引用 7 楼 u012724379 的回复:
[quote=引用 6 楼 awajwgluiawa 的回复:] 你自己编译试试就知道你的对不对了
[/quote]你是1.x的版本jdk?
Kenzson 2014-04-16
  • 打赏
  • 举报
回复
引用 7 楼 u012724379 的回复:
[quote=引用 6 楼 awajwgluiawa 的回复:]
你自己编译试试就知道你的对不对了




[/quote]
teemai 2014-04-16
  • 打赏
  • 举报
回复
打印: OK t1 class java.lang.String OK 1 class java.lang.Integer
teemai 2014-04-16
  • 打赏
  • 举报
回复

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

class Test {
	Map<String, List<String>> maplist1 = new HashMap<String, List<String>>();
	Map<String, List<Integer>> maplist2 = new HashMap<String, List<Integer>>();

	public void a() {
		List<String> l1 = new ArrayList<String>();
		l1.add("t1");
		List<Integer> l2 = new ArrayList<Integer>();
		l2.add(1);
		maplist1.put("1", l1);
		maplist2.put("1", l2);
		test(maplist1);
		test(maplist2);
	}

	public <T> void test(Map<String, List<T>> maplist) {
		System.out.println("OK");
		List<T> list = maplist.get("1");
		for(T t : list){
			System.out.println(t);
			System.out.println(t.getClass());
		}
	}
	
	public static void main(String[] args) {
		new Test().a();
	}
}
-江沐风- 2014-04-16
  • 打赏
  • 举报
回复
引用 6 楼 awajwgluiawa 的回复:
你自己编译试试就知道你的对不对了




Kenzson 2014-04-16
  • 打赏
  • 举报
回复
引用 5 楼 u012724379 的回复:
[quote=引用 3 楼 awajwgluiawa 的回复:] 应该是:
HashMap<String, ArrayList<String>> maplist1 = new HashMap<String, ArrayList<String>>();
HashMap<String, ArrayList<Integer>> maplist2 = new HashMap<String, ArrayList<Integer>>();
[/quote]你自己编译试试就知道你的对不对了
-江沐风- 2014-04-16
  • 打赏
  • 举报
回复
引用 3 楼 awajwgluiawa 的回复:
应该是:
HashMap<String, ArrayList<String>> maplist1 = new HashMap<String, ArrayList<String>>();
HashMap<String, ArrayList<Integer>> maplist2 = new HashMap<String, ArrayList<Integer>>();
-江沐风- 2014-04-16
  • 打赏
  • 举报
回复
public class Test
{
	public static void main(String[] args) throws Exception
	{
		
		List<Integer> listInteger = new ArrayList<Integer>();
		List<String> listString = new ArrayList<String>();
		printList(listInteger); //编译无错;
		printList(listString);
		
		HashMap<String, List<Integer>> maplist1 = new HashMap<String, List<Integer>>();
		HashMap<String, List<String>> maplist2 = new HashMap<String, List<String>>();
		test(maplist1); //编译有错;
		test(maplist2);
			
	}

	//因为是泛型,
	public static void printList(List<?> list)
	{
		System.out.println("print OK");
	}

	//因为是泛型,HashMap后的String 和 List<?> 都应该是确定的;
	public void test(HashMap<String, List<?>> maplist22)
	{
		System.out.println("OK");
	}
}
Kenzson 2014-04-16
  • 打赏
  • 举报
回复
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

/**
 *
 * @author Administrator
 */
public class Test{

HashMap<String, ArrayList<String>> maplist1 = new HashMap<>();
HashMap<String, ArrayList<Integer>> maplist2 = new HashMap<>();
public void a() {
test(maplist1);
test(maplist2);
}

public <T> void test(Map<String, ArrayList<T>> maplist) {
System.out.println("OK");
}
public static void main(String[] args){
    Test t=new Test();
    t.a();
}
}
sducaicai 2014-04-16
  • 打赏
  • 举报
回复
public <T> void test(Map<String, List<T>> maplist) { System.out.println("OK"); }
huage 2014-04-16
  • 打赏
  • 举报
回复
这里你把传入的map里面封装list是?, 那么上面的传入的map也必须是?的 只要改的一致就可以了,

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧