这是父类
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()) {
boolean
(基元类型(。