我有幾個data class
與領域,這是在形式使用,需要他們有一個方法的返回true
如果任何字段被填滿。聯盟類型/擴展接口
我不想改寫這個對所有的類,所以我做這樣的時刻:
data class Order(var consumer: String, var pdfs: List<URI>): Form {
override val isEmpty(): Boolean
get() = checkEmpty(consumer, pdfs)
}
data class SomethingElse(var str: String, var set: Set<String>): Form {
override val isEmpty(): Boolean
get() = checkEmpty(str, set)
}
interface Form {
val isEmpty: Boolean
fun <T> checkEmpty(vararg fields: T): Boolean {
for (f in fields) {
when (f) {
is Collection<*> -> if (!f.isEmpty()) return false
is CharSequence -> if (!f.isBlank()) return false
}
}
return true;
}
}
這顯然不是很漂亮,也沒有類型安全。
什麼這樣做,沒有每個屬性抽象成某種Field
型的更習慣的方法?
澄清:我正在尋找一種方式,提供所有允許的類型(String
,Int
,List
,Set
),併爲每一個函數來告訴我們,如果他們得到詳盡when
,例如空。就像使用方法isEmptyFormField
的「擴展接口」一樣。
仍然不完全滿意,因爲它非常冗長,但我會接受這個答案。謝謝。 –