gpt4 book ai didi

java - Java 模拟 UNIX 文件系统中的空指针异常

转载 作者:行者123 更新时间:2023-12-01 06:43:12 25 4
gpt4 key购买 nike

我目前正在尝试帮助一位 friend 完成 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 都会为空。非常感谢任何帮助。谢谢!

最佳答案

让我们看看您的 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<>()

假定类型相同。

关于java - Java 模拟 UNIX 文件系统中的空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29738601/

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