我正在使用mbassador,并且发布到接口似乎不起作用。下面是一个使用 JUnit的sscce 。我希望这个程序能够打印hello world
,但事实并非如此。但是,如果我更改此行:
public void handleFoo(FooInterface f) {
对此:
public void handleFoo(FooImpl f) {
该程序完美运行。这是一个错误,还是我做错了什么?注意:public void handleFoo(Object o)
也有效。
import net.engio.mbassy.bus.BusConfiguration;
import net.engio.mbassy.bus.MBassador;
import net.engio.mbassy.listener.Handler;
import org.junit.Test;
public class MBassadorTest {
@Test
public void testMBassador() {
MBassador<FooInterface> bus = new MBassador<>(BusConfiguration.Default());
bus.subscribe(this);
FooInterface myFoo = new FooImpl();
bus.publish(myFoo);
}
public static interface FooInterface {
String doSomething();
}
public static class FooImpl implements FooInterface {
public String doSomething() {
return "hello world";
}
}
@Handler(rejectSubtypes = false)
public void handleFoo(FooInterface f) {
System.out.println(f.doSomething());
}
}