我有这个特定的要求,因为第三方库不知何故有这个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]
我的想法是,在将对象发送到Vaadin的Binder
类之前,通过使用Java反射,移除数组的第二个元素(interface D
((如果可能的话(。
您不能在Java中修改反射信息。但事实上,这是Vaadin中的一个错误,请提交错误报告。在Java中,具有相同名称(和参数(的接口方法不被认为是重复的——它是相同的方法。当java编译器怀疑时,它会发出一个错误。如果您的程序已经编译,那么它是正确的,Vaadin必须使用任何正确的程序。