Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.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 用单个文件编写的应用程序引发NullPointerException_Java - Fatal编程技术网

Java 用单个文件编写的应用程序引发NullPointerException

Java 用单个文件编写的应用程序引发NullPointerException,java,Java,我不明白,如果我把我的类分割成不同的文件并声明它们为公共的,我对抽象类getOn方法有问题,就像这样 package test.local; abstract public class Passenger { public void getOn(Transport transport) { transport.takePassenger(Passenger.this); } } package test.local; public class Dog ext

我不明白,如果我把我的类分割成不同的文件并声明它们为公共的,我对抽象类
getOn
方法有问题,就像这样

package test.local;

abstract public class Passenger {
    public void getOn(Transport transport) {
        transport.takePassenger(Passenger.this);
    }
}

package test.local;

public class Dog extends Passenger {
}
import java.util.List;

interface Transport {
    public void takePassenger(Passenger passenger);
}

class Bus implements Transport {
    private List<Passenger> passengers;

    public void takePassenger(Passenger passenger) {
        passengers.add(passenger);
    }

    public List<Passenger> getPassenger() {
        return passengers;
    }
}

abstract class Passenger {
    public void getOn(Transport transport) {
        transport.takePassenger(Passenger.this);
    }
}

class Dog extends Passenger {

}


public class Magic {
   public static void main(String []args) {
      Bus bus = new Bus();

      Dog passenger = new Dog();
      passenger.getOn(bus);
   }
}
一切正常,我可以将
Passenger.this
传递给
getOn
方法,但如果我在单个文件中编写整个应用程序,就像这样

package test.local;

abstract public class Passenger {
    public void getOn(Transport transport) {
        transport.takePassenger(Passenger.this);
    }
}

package test.local;

public class Dog extends Passenger {
}
import java.util.List;

interface Transport {
    public void takePassenger(Passenger passenger);
}

class Bus implements Transport {
    private List<Passenger> passengers;

    public void takePassenger(Passenger passenger) {
        passengers.add(passenger);
    }

    public List<Passenger> getPassenger() {
        return passengers;
    }
}

abstract class Passenger {
    public void getOn(Transport transport) {
        transport.takePassenger(Passenger.this);
    }
}

class Dog extends Passenger {

}


public class Magic {
   public static void main(String []args) {
      Bus bus = new Bus();

      Dog passenger = new Dog();
      passenger.getOn(bus);
   }
}
更改此项:

private List<Passenger> passengers;
私人名单乘客;
为此:

private List<Passenger> passengers = new ArrayList<Passenger>();
private List passengers=new ArrayList();
在前一行代码中,您尚未将
乘客
初始化为值,因此它为空。尝试取消对它的引用,例如使用
乘客。添加(乘客)
,将产生NullPointerException。

更改此选项:

private List<Passenger> passengers;
私人名单乘客;
为此:

private List<Passenger> passengers = new ArrayList<Passenger>();
private List passengers=new ArrayList();

在前一行代码中,您尚未将
乘客
初始化为值,因此它为空。尝试取消对它的引用,例如使用
乘客。添加(乘客)
,将产生NullPointerException。

您需要初始化
总线
类中的
乘客
字段。更改此声明:

private List<Passenger> passengers;
私人名单乘客;
致:

private List passengers=new ArrayList();

将类移动到单独的文件与您报告的错误无关。

您需要初始化
总线
类中的
乘客
字段。更改此声明:

private List<Passenger> passengers;
私人名单乘客;
致:

private List passengers=new ArrayList();

将类移动到单独的文件与您报告的错误无关。

在您初始化列表之前,它将始终引发NullPointerException:

private List<Passenger> passengers;
私人名单乘客;

private List passengers=new ArrayList();

在您初始化列表之前,它将始终抛出NullPointerException:

private List<Passenger> passengers;
私人名单乘客;

private List passengers=new ArrayList();

这是因为您尚未初始化

private List<Passenger> passengers;
私人名单乘客;
在总线类中创建一个默认构造函数,如下所示:

public Bus(){
   passengers = new ArrayList<>();
}
公共巴士(){
乘客=新阵列列表();
}

这是因为您尚未初始化

private List<Passenger> passengers;
私人名单乘客;
在总线类中创建一个默认构造函数,如下所示:

public Bus(){
   passengers = new ArrayList<>();
}
公共巴士(){
乘客=新阵列列表();
}

听起来像是配置问题。确保你清理了你的项目。抛出异常的是哪一行?(请发布堆栈跟踪。)此外,第一个示例在包
test.local
中包含类
Passenger
Dog
,但是引发异常的代码(从您发布的内容来看)似乎在默认包中包含这些类。这可能是您遇到的配置问题的一部分。Java异常包括堆栈跟踪。您应该提供该信息,或者至少提供违规代码行的行号。添加了跟踪,谢谢您从未初始化过
乘客
。更改
私人名单乘客
私人列表乘客=新建ArrayList()@Edwardth工作!听起来像是配置问题。确保你清理了你的项目。抛出异常的是哪一行?(请发布堆栈跟踪。)此外,第一个示例在包
test.local
中包含类
Passenger
Dog
,但是引发异常的代码(从您发布的内容来看)似乎在默认包中包含这些类。这可能是您遇到的配置问题的一部分。Java异常包括堆栈跟踪。您应该提供该信息,或者至少提供违规代码行的行号。添加了跟踪,谢谢您从未初始化过
乘客
。更改
私人名单乘客
私人列表乘客=新建ArrayList()@Edwardth工作!