Ril*_*ark 13 java inheritance interface
我有两个接口,HasClickHandlers和DoesFancyFeedback.然后我有一些实现两个接口的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)
请注意两个接口之间的一个&符号.
您可以尝试使用泛型:
public < T extends HashClickHandlers & DoesFancyFeedback > void foo (
T aThingIPassedIn
)
{
aThingIPassedIn.addClickHandler( );
aThingIPassedIn.doFancyFeedback( );
}
Run Code Online (Sandbox Code Playgroud)