Also habe ich den Code unten, in Kotlin geschrieben.Kotlin - Attribut Sichtbarkeit auf Companion-Objekt
Ich bekomme einen Kompilierungsfehler auf der letzten Befehlszeile (return params.keys.containsAll(MANDATORY_PARAMS)
), der Compiler sagt Unsolved reference: MANDATORY_PARAMS
, aber ich verstehe nicht wirklich warum.
Ich dachte, Companion-Objekte sollten eine gewisse Sichtbarkeit in den Attributen der Klassen haben, denen sie "Gesellschaft halten".
Was könnte ich tun, um dies zu lösen? Wie kann ich MANDATORY_PARAMS
sowohl für MandatoryParametersValidator
als auch für sein Begleitobjekt sichtbar machen?
(Disclaimer:.. Dieser Code von Java Kotlin Auf Java-Version, eine statische Methode auf der gleichen Klasse sein mandatoryParametersHaveBeenProvided
verwendet migriert wird)
import javax.validation.ConstraintValidator
import javax.validation.ConstraintValidatorContext
class MandatoryParametersValidator : ConstraintValidator<EnforceMandatoryParameters, Map<String, String>> {
val MANDATORY_PARAMS = arrayOf("bookingReference", "lastName")
override fun initialize(constraintAnnotation: EnforceMandatoryParameters?) {
// do nothing
}
override fun isValid(params: Map<String, String>, context: ConstraintValidatorContext?): Boolean {
MANDATORY_PARAMS
.filter { !params.containsKey(it) }
.forEach { parameterName ->
context?.disableDefaultConstraintViolation()
context?.buildConstraintViolationWithTemplate("Mandatory parameter $parameterName is missing.")?.addConstraintViolation()
}
return mandatoryParametersHaveBeenProvided(params)
}
companion object {
fun mandatoryParametersHaveBeenProvided(params: Map<String, String>) : Boolean {
return params.keys.containsAll(MANDATORY_PARAMS)
}
}
}
Vielen Dank!