我有一个Kotlin数据类:
data class PaymentAccount(
val accountId: Int,
val accountNumber: String,
val title: String
)
这就是我在Java中要做的:
创建一个抽象类:
public abstract class PaymentAccount {
protected int accountId;
protected String accountNumber;
protected String title;
public PaymentAccount(int accountId,
String accountNumber,
String title) {
this.accountId = accountId;
this.accountNumber = accountNumber;
this.title = title;
}
}
创建空对象并扩展抽象类:
public class NullPaymentAccount extends PaymentAccount {
public NullPaymentAccount() {
super(-1,
"Invalid account number",
"Invalid title");
}
}
创建一个真实的对象并扩展抽象类:
public class RealPaymentAccount extends PaymentAccount {
public RealPaymentAccount(int accountId,
String accountNumber,
String title) {
super(accountId,
accountNumber,
title);
}
}
如何在Kotlin中正确实现空对象模式?有不止一种方法吗?如果是这样,最简洁、最优雅的方式是什么?
发布于 2018-08-15 03:29:33
在Kotlin中,您可以做同样的事情,只需更少的代码行:
interface Account {
val accountId: Int
val accountNumber: String
val title: String
}
object EmptyAccount : Account {
override val accountId: Int = 1
override val accountNumber: String = ""
override val title: String = ""
}
data class PaymentAccount(
override val accountId: Int,
override val accountNumber: String,
override val title: String): Account
请注意,为了提高效率,我们也将EmptyAccount
设置为单例。
https://stackoverflow.com/questions/51847914
复制相似问题