1

我正在使用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());
    }
}
4

2 回答 2

4

我是 MBassador 的作者,durron597 说的是真的。缺少对接口的识别是一个错误(我承认这是一个草率的错误),但很容易修复。它已经在我的代码库中修复了,我目前正在对它进行更多测试。因为我想包含更多的错误修正,所以发布仍在等待中,但不会超过几天。

若带来不便请谅解...

于 2013-05-21T14:05:11.533 回答
1

没关系,这是一个错误。根据作者的说法,它应该在 1.1.7 版本中修复。

https://github.com/bennidi/mbassador/issues/31

于 2013-05-20T18:06:03.753 回答