gpt4 book ai didi

Java 泛型扩展循环

转载 作者:行者123 更新时间:2023-11-29 06:58:32 25 4
gpt4 key购买 nike

我如何遍历从类扩展的对象?我举个例子:我有一个抽象类 (AbstractDTO) 和 2 个扩展 AbstractDTO 的类:

public abstract class AbstractDTO
{
private int id;

/**
* @return the id
*/
public int getId()
{
return id;
}
/**
* @param id the id to set
*/
public void setId(int id)
{
this.id = id;
}
}


public class FirstDTO extends AbstractDTO
{

}

public class SecondDTO extends AbstractDTO
{

}

现在我得到了一个方法,它排除了扩展 AbstractDTO 的 2 个对象集合。我想将第二个列表的所有对象添加到第一个列表中,如果它们不在第一个列表中的话。我该怎么做?

我尝试了以下方法:

public static void summarizeCollection(List<? extends AbstractDTO> firstList, Set<? extends AbstractDTO> secondList)
{
for(AbstractDTO second : secondList)
{
boolean exists = false;
for (AbstractDTO first : firstList)
{
if (second.getId() == first.getId())
{
exists = true;
}
}
if(!exists)
{
firstList.add(second);
}
}

}

我在“firstList.add(second);”行中遇到错误因为我的第二个对象是 AbstractDTO 类型,而不是扩展 AbstractDTO 的类。

有人可以帮我吗?非常感谢 ;)

最佳答案

编译器无法确定 secondList 中的元素与 firstList 中声明的元素属于同一类型,因此您会在此处遇到编译器错误:

firstList.add(second);

这是参数定义引起的:

List<? extends AbstractDTO> firstList, Set<? extends AbstractDTO> secondList

如果您确定 ListSet 属于同一类型,并且此类型扩展了 AbstractDTO,那么请像这样声明您的方法:

public static <T extends AbstractDTO> void summarizeCollection(List<T> firstList, Set<T> secondList)

然后,在方法内部,更改此 for 循环:

for(AbstractDTO second : secondList)

进入

for(T second : secondList)

继续。

更多信息:

关于Java 泛型扩展循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29854498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com