필드가있는 여러 개의 필드가 있습니다.이 필드는 양식에 사용되며 필드가 채워진 경우 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
인 "확장 인터페이스"와 같습니다.
여전히 매우 만족스럽지는 않지만 매우 답답합니다.하지만이 대답을 받아 들일 것입니다. 감사. –