问题描述
我之所以有此特定要求,是因为第三方库以某种方式具有interface A
,其中extends B
,又是extends C,D
。
现在,问题是interface C extends D
。 IMO,由于C
已经扩展了D
,因此B
应该仅extends C
。
当我尝试使用interface A
类型的对象来绑定Vaadin Flow中的表单时,就会出现问题。错误消息是:Duplicate key found for property [this common method]
。
我检查了对象,发现存在以下层次结构:
// myObject:
// reflectionData:
// referent:
// interfaces:
// [0]:
// name: "com.example...." [interface B from above]
// reflectionData:
// referent:
// interfaces:
// [0]:
// name: "com.example..." [interface C from above]
// [1]:
// name: "com.example..." [interface D from above]
我的想法是,也许可以通过使用Java反射,在将对象发送到Vaadin的interface D
类之前,删除数组(Binder
)的第二个元素(如果可能的话)。
解决方法
您无法在Java中修改反射信息。但实际上,这是Vaadin中的错误,请提交错误报告。在Java中,具有相同名称(和参数)的接口方法不被认为是重复的-它是相同的方法。当Java编译器产生疑问时,它将发出错误。如果您的程序已经编译,则是正确的,并且Vaadin必须使用任何正确的程序。