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工作!