我正在尝试在方法签名中使用通配符类型,并传递不同的参数化类型。如果我将商品参数化为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

09-28 14:51