通用返回值(java)

时间:2009-09-23 09:08:19

标签: java generics return-value

这很好用:

// Return all objects with code 'code'.
static List<? extends ICode> getObjects(String code, List<? extends ICode> list)
{
  <ICode> retValue = new ArrayList<ICode>();
  for (ICode item : list)
  { 
    if (item.getCode().equals(code))
    {
        retValue.add(item);
    }
  }
  return retValue;
}

'单数'版本可以是:

// Return the first object found with code 'code'.
static ICode getObject(String code, List<? extends ICode> lijst)
{
  for (ICode item : lijst)
{
     if (item.getCode().equals(code)) return item;
}
return null;
}

但我不想返回值ICode,而是返回值<? extends ICode>。 可以吗?

看到Jon Skeets的回答,我现在更喜欢使用T而不是?也是复数版本:

// Return all objects with code 'code'.
    public static <T extends ICode> List<T> getObjects(String code, List<T> lijst)
    {
        List<T> retValue = new ArrayList<T>();
        for (T item : lijst)
        {
        if (item.getCode().equals(code))
        {
        retValue.add(item);
        }
      }
      return retValue;
    }

2 个答案:

答案 0 :(得分:5)

我假设您希望它与实际列表的类型相同。在这种情况下,应该这样做:

static <T extends ICode> T getObject(String code, List<T> list)
{
  for (T item : list)
  {
     if (item.getCode().equals(code)) return item;
  }
  return null;
}

答案 1 :(得分:0)

如果让返回类型为ICode,则可以返回任何扩展ICode的类型。