这很好用:
// 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;
}
答案 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的类型。