私は以下のコードをKotlinで書いています。Kotlin - コンパニオンオブジェクトへの属性の可視性
最後の命令行(return params.keys.containsAll(MANDATORY_PARAMS)
)でコンパイルエラーが発生しましたが、コンパイラにはUnsolved reference: MANDATORY_PARAMS
と表示されますが、なぜそれほど大きな理由はありません。
私は、コンパニオンオブジェクトは、「会社を守る」クラスの属性にある種の可視性があると考えられました。
これを解決するにはどうすればよいですか? MandatoryParametersValidator
とそれに付随するオブジェクトの両方にMANDATORY_PARAMS
を表示させるにはどうすればよいですか?
(免責事項:このコードはKotlinへのJavaから移行されているJavaのバージョンでは、mandatoryParametersHaveBeenProvided
は、同じクラスの静的メソッドであるために使用される)
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)
}
}
}
どうもありがとう!