フィールドには複数のフィールドがあり、フォームで使用され、いずれかのフィールドが入力されている場合はメソッドを返すようにする必要があります。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
を持つ「拡張インタフェース」と同様です。
まだ完全に満足していないので、非常に冗長ですが、私はこの答えを受け入れるつもりです。ありがとう。 –