MBassador不支持接口消息

时间:2013-05-20 18:01:52

标签: java interface interface-implementation

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

2 个答案:

答案 0 :(得分:4)

我是MBassador的作者,durron597说的是真的。缺少对接口的识别是一个错误(我承认这是一个草率的错误)但它很容易修复。它已在我的代码库中修复,我目前正在为它添加一些测试。因为我想要包含更多错误修正,所以该版本仍处于待定状态,但不会超过几天。

对于给您带来的任何不便,我深表歉意......

答案 1 :(得分:1)

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

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