如何解决:“必填:无,找到:Converter <*,*>”?

时间:2019-07-11 10:50:39

标签: generics kotlin type-inference vaadin8

我想基于反射来动态生成Vaadin 8 TextField。至少应支持StringDoubleInteger

为避免重复的代码进行bean验证,应根据类型选择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
}

0 个答案:

没有答案