Java接口继承自其他两个接口-是否可以通过使用Java反射来删除有关这些接口之一的信息?

问题描述

我之所以有此特定要求,是因为第三方库以某种方式具有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必须使用任何正确的程序。