在Java中指定多个接口的方法

Ril*_*ark 13 java inheritance interface

我有两个接口,HasClickHandlersDoesFancyFeedback.然后我有一些实现两个接口的UI对象 - 例如,Button实现它们的一个都有点击处理程序,也做了花哨的反馈.

在我的代码声明中Button,我不想实际说,Button因为可能以后我会希望它,我不知道,一个Image有点击处理程序并做了花哨的反馈.所以不是具体而是说:

Button saveButton = aButtonIPassedIn;
saveButton.addClickHandler();
saveButton.doFancyFeedback();
Run Code Online (Sandbox Code Playgroud)

我想说,

{HasClickHandlers + DoesFancyFeedback} clickyFeedbackThing = aThingIPassedIn;
clickyFeedbackThing.addClickHandler();
clickyFeedbackThing.doFancyFeedback();
Run Code Online (Sandbox Code Playgroud)

我希望编译器要求aThingIPassedIn实现HasClickHandlers DoesFancyFeedback.

我可以创建一个扩展这两个接口的接口,并使用它.有没有更简单/更简洁的方式?

Ale*_*exR 27

我认为没有更好的方法可以做你想做的事.我只是想建议你做以下事情.您可以创建接受需要2个接口的参数的方法(让我们称之为foo):

<T extends HasClickHandlers & DoesFancyFeedback> void foo(T arg);
Run Code Online (Sandbox Code Playgroud)

请注意两个接口之间的一个&符号.

  • @Riley:在这种情况下你不必抛出它,只需调用它上面的方法即可. (2认同)

Ale*_*yak 5

您可以尝试使用泛型:

public < T extends HashClickHandlers & DoesFancyFeedback > void foo (
        T aThingIPassedIn
    )
{
    aThingIPassedIn.addClickHandler( );
    aThingIPassedIn.doFancyFeedback( );
}
Run Code Online (Sandbox Code Playgroud)