如何在不用Java迭代的情况下编译完整的列表

mad*_*ulf 2 java collections

说我有这个班:

public class BaseJob{

String name;

public void setName(String name){
this.name=name;
}
public String getName()
{
   return name;
}
}
Run Code Online (Sandbox Code Playgroud)

和另一个扩展它的类:

public class DetailedJob extends BaseJob{

public void doThing();

}
Run Code Online (Sandbox Code Playgroud)

此外,我在另一个类中有这个方法:

List<BaseJob> getSomeJobs() 
Run Code Online (Sandbox Code Playgroud)

现在,我的问题是:

是否可以避免在返回的getSomeJobs列表中按顺序转换每个项目,如果我确定每个返回的BaseJob确实是一个DetailedJob?

换句话说,是否有另一种解决方案,而不是以下解决方案来强制列表中的所有项目

List<BaseJob> baseJobList = getSomeJobs(); 
List<DetailedJob> detailedJobList = new ArrayList<DetailedJob>();
for (BaseJob baseJob : baseJobList)
    detailedJobList.add((DetailedJob) baseJob);
Run Code Online (Sandbox Code Playgroud)

Tom*_*ine 8

您可能想要做的是参数化定义的类getSomeJobs.

public final class JobHolder<T extends BaseJob> {
    public List<T> getSomeJobs() {
        ...
Run Code Online (Sandbox Code Playgroud)

通常未经检查的演员表示设计问题.在某些情况下,例如低级实现和处理序列化时,它们是不可避免的.


Gor*_*son 5

如果你知道所有的工作都是详细的工作,你为什么要把它们放在basejobs的arraylist?没有理由,并且该方法将消除许多可能的错误和异常.