我正在尝试在方法签名中使用通配符类型,并传递不同的参数化类型。如果我将商品参数化为Map,则Eclipse开始抱怨:
The method DoStuff(Map<String,Test.GenericItemWrapper<?>>) in the type Test
is not applicable for the arguments (Map<String,Test.GenericItemWrapper<String>>)
这是代码:
import java.util.Map;
public class Test
{
public static void main(String[] args)
{
Map<String, GenericItemWrapper<Long>> longWrapper = null;
Map<String, GenericItemWrapper<String>> stringWrapper = null;
Test t = new Test();
t.DoStuff(longWrapper); // error here
t.DoStuff(stringWrapper); // error here
}
public void DoStuff(Map<String, GenericItemWrapper<?>> aParam)
{
}
public static class GenericItemWrapper<ItemType>
{
private ItemType mItem;
public GenericItemWrapper()
{
this(null);
}
public GenericItemWrapper(ItemType aItem)
{
mItem = aItem;
}
}
}
最佳答案
您缺少用于实例化GenericItemWrapper
的参数。应该
GenericItemWrapper<Long> longWrapper = new GenericItemWrapper<Long>(1l); // example number
但就我所见,您不需要该构造函数,因为您始终可以在该类中访问通用类型
ItemType
。