我正在使用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());
}
}
答案 0 :(得分:4)
我是MBassador的作者,durron597说的是真的。缺少对接口的识别是一个错误(我承认这是一个草率的错误)但它很容易修复。它已在我的代码库中修复,我目前正在为它添加一些测试。因为我想要包含更多错误修正,所以该版本仍处于待定状态,但不会超过几天。
对于给您带来的任何不便,我深表歉意......
答案 1 :(得分:1)
没关系,这是一个错误。根据作者的说法,它应该在版本1.1.7中修复。