繁体   English   中英

Java中模拟的UNIX文件系统中的Null Pointer异常

[英]Null Pointer Exception in simulated UNIX filesystem in Java

我目前正在尝试帮助一位朋友进行Java课堂学习,由于不熟悉Java的人遇到了一些麻烦。 我的代码如下:

文件类别

public abstract class File {

private String name;
private Directory parent;
public File(String name){this.name=name;}
   Directory getParent(){return parent;}
  // String getPath(){}
}

TextFile类

public class TextFile extends File{
private String content;
TextFile(String name, String content){ super(name); }
String getContent(){ return content;}
void setContent(String content){this.content=content;}
}

目录类别

import java.util.ArrayList;

public class Directory extends File{
private ArrayList<File> children;
Directory(String name){super(name);}
void addChild(File f){children.add(f);}
ArrayList<File> getChildren(){ return children; }
}

主班

public class Driver {
public static void main(String[] args){
    Directory root = new Directory("/");
    Directory a = new Directory("a");

    if(a == null){
        System.out.println("A is null. Program will not continue.");
    }
    else{
    root.addChild(a);
    TextFile b = new TextFile("b", "hello world");
    }
    }
}

我遇到的问题是,当我尝试运行代码时,在以下位置出现空指针异常:

Directory.addChild(Directory.java:8)

Driver.main(Driver.java:12)

我一生都无法想到为什么会发生这种异常。 我不认为为什么在任何时候a都将为null。 非常感谢您的协助。 谢谢!

让我们看看您的Directory类:

public class Directory extends File {
    private ArrayList<File> children;
    Directory(String name){ super(name); }
    void addChild(File f){ children.add(f); }
}

您永远不会初始化children

尝试添加构造函数:

children = new ArrayList<File>();

因此,该类如下所示:

public class Directory extends File {

    private ArrayList<File> children;

    Directory(String name){
        super(name);
        children = new ArrayList<File>();
    }

    void addChild(File f){ children.add(f); }
}

另外,您可以只写:

private ArrayList<File> children = new ArrayList<File>();

在Java 7及更高版本中,您可以将构造函数简化为:

new ArrayList<>()

假定类型相同。

Directory

private ArrayList<File> children;

声明一个ArrayList但不初始化它。 你需要类似的东西

private ArrayList<File> children = new ArrayList<>();

但是我更喜欢对List接口进行编码,例如

private List<File> children = new ArrayList<>();

您需要实例children第一。

private ArrayList<File> children = new ArrayList<File>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM