gpt4 book ai didi

java - 扩展父类(super class)属性

转载 作者:行者123 更新时间:2023-11-30 06:46:13 25 4
gpt4 key购买 nike

我有一个 Wallet 类,它扩展到 3 个不同的钱包 PaypalWallet、BankWallet 和 ChequeWallet。每个具有不同的属性保存父类(super class)属性。

这些钱包用于 Payout,它扩展了 2 种支付方式:PaymentBank 和 PayoutCheque。

public class Payout {
@Id private String id;
private String userId;
protected Wallet userWalletInfo;

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public String getUserId() {
return userId;
}

public void setUserId(String userId) {
this.userId = userId;
}

public Wallet getUserWalletInfo() {
return userWalletInfo;
}

public void setUserWalletInfo(Wallet userWalletInfo) {
this.userWalletInfo = userWalletInfo;
}
}

如果我在ChequePayout中继承这个类,我如何指定userWalletInfo应该是ChequeWallet的实例?类似于扩展类?

我的第一个想法是重写 setter,如下所示:

public class PayoutCheque extends Payout {
private String serialNumber;
private ChequeStatus status;

public String getSerialNumber() {
return serialNumber;
}

public void setSerialNumber(String serialNumber) {
this.serialNumber = serialNumber;
}

public ChequeStatus getStatus() {
return status;
}

public void setStatus(ChequeStatus status) {
this.status = status;
}

@Override
public void setUserWalletInfo(Wallet userWalletInfo) {
if (userWalletInfo instanceof ChequeWallet) {
super.setUserWalletInfo(userWalletInfo);
}
else {
//throw exception
}
}
}

但是我觉得这不是正确的方法,或者我在这里遗漏了一些重要的东西。

最佳答案

听起来您正在寻找泛型。

private class Wallet {
}

private class ChequeStatus {
}

private class ChequeWallet extends Wallet {
}

public class Payout<W extends Wallet> {
private String id;
private String userId;
protected W userWalletInfo;

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public String getUserId() {
return userId;
}

public void setUserId(String userId) {
this.userId = userId;
}

public Wallet getUserWalletInfo() {
return userWalletInfo;
}

public void setUserWalletInfo(W userWalletInfo) {
this.userWalletInfo = userWalletInfo;
}
}

public class PayoutCheque extends Payout<ChequeWallet> {
private String serialNumber;
private ChequeStatus status;

public String getSerialNumber() {
return serialNumber;
}

public void setSerialNumber(String serialNumber) {
this.serialNumber = serialNumber;
}

public ChequeStatus getStatus() {
return status;
}

public void setStatus(ChequeStatus status) {
this.status = status;
}

@Override
public void setUserWalletInfo(ChequeWallet userWalletInfo) {
super.setUserWalletInfo(userWalletInfo);
}
}

关于java - 扩展父类(super class)属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43654411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com