在JAVA中从子类调用父类方法时引发Nullpointer异常



这是父类

public class RequestDTO implements Serializable {
private static final long serialVersionUID = 1L;
private String paymentProvider;
private Boolean isEncrypt;
public RequestDTO() {
}
public RequestDTO(String paymentProvider,
Boolean isEncrypt) {
super();
this.paymentProvider = paymentProvider;
this.isEncrypt = isEncrypt;
}

public void setPaymentProvider(String paymentProvider) {
this.paymentProvider = paymentProvider;
}


public Boolean getIsEncrypt() {
return isEncrypt;
}
public void setIsEncrypt(Boolean isEncrypt) {
if (isEncrypt == null) {
this.isEncrypt = false;
} else {
this.isEncrypt = isEncrypt;
}
}
}

下面是儿童类

public class CardDetailsDTO extends RequestDTO {

private static final long serialVersionUID = 1L;

private String cardNumber;
private String expiryDate;
private String cardHolderName;
private String cardType;
private String cardIssueDate;
private String cardIssueNo;


private String modifyDummyCardNumber(String cardNum) {
String dummyCardNumber ;
if (cardNum != null && !cardNum.isEmpty() && this.getIsEncrypt() != true) {
dummyCardNumber = "************" + cardNum.substring(12);
return dummyCardNumber;
} else {
return "********";
}
}

public String getCardNumber() {
return cardNumber;
}

public void setCardNumber(String cardNumber) {
this.cardNumber = cardNumber;
}
public String getExpiryDate() {
return expiryDate;
}
public void setExpiryDate(String expiryDate) {
this.expiryDate = expiryDate;
}
public String getCardHolderName() {
return cardHolderName;
}
public void setCardHolderName(String cardHolderName) {
this.cardHolderName = cardHolderName;
}
public String getCardType() {
return cardType;
}
public void setCardType(String cardType) {
this.cardType = cardType;
}
public String getCardIssueDate() {
return cardIssueDate;
}
public void setCardIssueDate(String cardIssueDate) {
this.cardIssueDate = cardIssueDate;
}
public String getCardIssueNo() {
return cardIssueNo;
}
public void setCardIssueNo(String cardIssueNo) {
this.cardIssueNo = cardIssueNo;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("CardDetailsDTO [expiryDate=");
builder.append(expiryDate);
builder.append(", cardHolderName=");
builder.append(cardHolderName);
builder.append(", cardType=");
builder.append(cardType);
builder.append(", cardIssueDate=");
builder.append(cardIssueDate);
builder.append(", cardIssueNo=");
builder.append(cardIssueNo);
builder.append(", dummyCardNumber=");
builder.append(modifyDummyCardNumber(getCardNumber()));
builder.append("]");
return builder.toString();
}
}

当我打电话给时

modifyDummyCardNumber

子类toString方法中的方法抛出空指针异常,因为我在modifyDummyCardNumber方法if语句中调用了this.getIsEncrypt((,如上所示,但当我从父类中获取isEncrypt值时,它显示为"真";,如何在子类中使用父类变量值?

这段代码中有一个问题:类RequestDTO有一个没有参数的构造函数,这意味着如果在使用该构造函数之前没有定义该类的变量,它可以抛出NullPointerException(这可能就是它抛出NullPointerException的原因(。

您还可以在类的每个变量的声明上指定默认值。

无论如何,如果变量isEncrypt被分配给任何值,则此代码不应该抛出任何NullPointerException

由于从未设置isEncrypt,因此默认情况下为null

术语getIsEncrypt()! = false试图将null取消装箱为bool,但失败了。

进行

public class RequestDTO implements Serializable {
// ...
private boolean isEncrypt;
// ...
}

而且,当你在

if (cardNum != null && !cardNum.isEmpty() && !this.getIsEncrypt()) {
为了避免此类错误,请将isEncrypted字段的类型更改为boolean(基元类型(。

最新更新