![](/img/trans.png)
[英]How to handle java.lang.NullPointerException in this code
[英]how to handle java.lang.nullpointerexception
大家好,我真的很困惑,我一直在獲取java.lang.NullPointerException
。 我嘗試在所有可能的地方進行處理,但未成功完成。 這是家庭作業。如果您可以看一下並提供有關java.lang.NullPointerException
反饋,那就太好了。 該異常發生在Captain.handleProblem()
和MalfucntionHandler.proccessMalfunction()
public abstract class MalfunctionHandler
{
MalfunctionHandler next;
/**
* severity is a type of Severity
*/
Severity severity;
/**
* @param description describes the severity of the problem
*/
String description;
/**
* @param f file object that refers to the log-silver.txt
*/
File f = new File("log-silver.txt");
MalfunctionHandler(Severity severity)
{
this.severity = severity;
}
public String getDescription()
{
if(description == null)
{
description = "No description available. Probably serious.";
}
return description;
}
final protected void processMalfunction(Malfunction malfunction)
{
if (this.severity == malfunction.getSeverity())
{
handleProblem();
}
else
{
// if(malfunction == null)
next.processMalfunction(malfunction);
}
}
final protected void addHandler(MalfunctionHandler next)
{
this.next = next;
}
abstract void handleProblem();
public Severity getSeverity()
{
return severity;
}
}
public class Malfunction
{
/**
* severity is a type of Severity
*/
Severity severity;
/**
* @param description describes the severity of the problem
*/
String description;
Malfunction(Severity severity, String description)
{
this.description = description;
this.severity = severity;
}
public Severity getSeverity()
{
return severity;
}
public String getDescription()
{
if(description == null)
{
description = "No description available. Probably serious.";
}
return description;
}
}
public enum Severity
{
TRIVIAL, LOW, MEDIUM, HIGH
}
public class SpaceMonkey extends MalfunctionHandler {
MalfunctionHandler malfunction;
SpaceMonkey(Severity severity)
{
super(severity);
}
@Override
void handleProblem()
{
if(malfunction.getDescription() == null)
{
description = "No description available. Probably serious.";
}
FileUtility.writeFile(f, malfunction.getDescription());
FileUtility.writeFile(f, "---> Space monkey assigned to problem.");
}
}
public class ServiceRobot extends MalfunctionHandler {
MalfunctionHandler malfunction;
ServiceRobot(Severity severity)
{
super(severity);
}
void handleProblem()
{
if(malfunction.getDescription() == null)
{
description = "No description available. Probably serious.";
}
FileUtility.writeFile(f, malfunction.getDescription());
FileUtility.writeFile(f, "---> Service Robot assigned to problem.");
}
}
public class Engineer extends MalfunctionHandler
{
MalfunctionHandler malfunction;
Engineer(Severity severity)
{
super(severity);
}
void handleProblem()
{
if(malfunction.getDescription() == null)
{
description = "No description available. Probably serious.";
}
FileUtility.writeFile(f, malfunction.getDescription());
FileUtility.writeFile(f, "---> Engineer assigned to problem.");
}
}
public class Captain extends MalfunctionHandler
{
MalfunctionHandler malfunction ;
Captain(Severity severity)
{
super(severity);
}
@Override
void handleProblem( )
{
if(malfunction.getDescription() == null)
{
description = "No description available. Probably serious.";
}
FileUtility.writeFile(f, malfunction.getDescription());
FileUtility.writeFile(f, "---> Captain assigned to problem.");
}
}
if(malfunction.getDescription() == null)
你從來沒有初始化的MalfunctionHandler對象類SpaceMonkey並試圖調用它的getDescription()在handleProblem方法的方法。 在Java對象中,將默認值設置為null會導致MalfunctionHandler故障; 在此處為null,而您嘗試在null上訪問其方法。
由於您的MalfunctionHandler是抽象類,請使用其子類(SpaceMonkey)對其進行初始化
MalfunctionHandler malfunction; = new SpaceMonkey(Severity);
故障對象未初始化,只是在Captain類中聲明。
同樣不建議捕獲NullPointerExceptions。 相反,您應該驗證並在代碼中進行檢查,以免產生此類異常。
默認情況下,實例變量的對象類型為null
MalfunctionHandler malfunction;
和
MalfunctionHandler malfunction = null;
都一樣 您的班級有這個問題
if(malfunction.getDescription() == null)
並且故障為null,那么您將在此處獲得NPE。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.