Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 添加/转换LinkedList<;超类>;到LinkedList<;子类>;_Java_Casting_Linked List_Add - Fatal编程技术网

Java 添加/转换LinkedList<;超类>;到LinkedList<;子类>;

Java 添加/转换LinkedList<;超类>;到LinkedList<;子类>;,java,casting,linked-list,add,Java,Casting,Linked List,Add,我有以下问题。在目录结构中,抽象类FSElement由其子类directory和File扩展。 每个目录都有一个链接列表子目录,用于填充相应的子文件和目录。 在我的问题中,我只想用子目录填充链接列表子目录,但是.add()只允许添加FSElement 如何将此FSElement强制转换为目录,并将其添加到链接列表中?感谢您的帮助 public class Directory extends FSElement { // Fields private LinkedList<

我有以下问题。在目录结构中,抽象类
FSElement
由其子类
directory
File
扩展。 每个
目录
都有一个
链接列表子目录
,用于填充相应的子文件和目录。 在我的问题中,我只想用
子目录
填充
链接列表子目录,但是
.add()
只允许添加
FSElement

如何将此
FSElement
强制转换为
目录
,并将其添加到链接列表中?感谢您的帮助

public class Directory extends FSElement {

    // Fields
    private LinkedList<FSElement> children;
    public FileSystem fileSystem;
    private LinkedList<Directory> subDirs;

[...]

    public LinkedList<Directory> getSubDirectories(){
        for(int i=0; i < children.size(); i++) {
            if(children.get(i).isDirectory()) {
                this.subDirs.add(children.get(i)); // ERROR occurs here
            }
        return this.subDirs;
        }
    }
}
公共类目录扩展了FSElement{
//田地
私人关系人子女;
公共文件系统;
私有链接列表子目录;
[...]
公共LinkedList getSubDirectories(){
对于(int i=0;i
答案在问题中:铸造。将
children.get(i)
转换为目录。另外,将subDirs设置为局部变量:没有理由每次调用getSubDirectories()时该列表都会变得越来越大。每次调用都会返回一个新列表。使用
List
作为返回类型,使用ArrayList作为实现:LinkedList速度慢,几乎不应该使用。this.subDirs.add((目录)children.get(i))