Как исправить: «Обязательно: Ничего, Найдено: Конвертер <*, *>»? - PullRequest
0 голосов
/ 11 июля 2019

Я бы хотел генерировать текстовые поля Vaadin 8 динамически на основе отражения. String, Double и Integer должны поддерживаться как минимум.

Чтобы избежать дублирования кода для проверки бина, конвертер Vaadin следует выбирать в зависимости от его типа, а затем добавить к BeanValidationBinder, см. Код ниже.

Однако компилятор Kotlin, похоже, пропускает некоторую информацию о типе, когда я получаю сообщение об ошибке из заголовка.

Кто-нибудь имеет представление о том, как решить проблему или проблема решаема без дублирования кода вообще?

MWE:

private fun getComponentForField(field: PropertyDescriptor, validationBinder: BeanValidationBinder<out Any>): Component {
    val label = field.name.capitalize()
    val converter: Converter<*, *>
    val component = when (field.readMethod.returnType) {
        String::class.java -> {
            converter = Converter.identity<String>()
            TextField(label)
        }
        Int::class.java -> {
            converter = StringToIntegerConverter("Please enter an integer value.")
            TextField(label)
        }
        Double::class.java -> {
            converter = StringToDoubleConverter("Please enter a double value.")
            TextField(label)
        }

        else -> {
            converter = Converter.identity<Date>()
            TextField()
        }
    }

    validationBinder
            .forField(component)
            .withConverter(converter)
            .bind(field.name)
    return component
}

...