Skip to content

Generic messages are delivered to all handlers of the class #83

Open
@littledot

Description

@littledot

Hi bennidi, first of all, thanks for all your hard work on the project.
I'm using MBassador 1.2 and I have a question regarding passing generic messages.

Suppose I have a class that supports generics

public class GenericEvent<T> {

    Class<T> mClass;

    public GenericEvent(Class<T> clazz) {
        mClass = clazz;
    }

    @Override
    public String toString() {
        return mClass.getCanonicalName();
    }
}

When I publish a GenericEvent, I notice that all handlers for GenericEvent gets called. For example, the following code:

    private void busTest() {
        Bus.publish(new GenericEvent<List>(List.class));
        Bus.publish(new GenericEvent<ArrayList>(ArrayList.class));
    }
    @Handler
    public void onGenEvent(GenericEvent e) {
        Leg.a("" + e);
    }

    @Handler
    public void onGenEventQuestion(GenericEvent<?> e) {
        Leg.a("" + e);
    }

    @Handler
    public void onGenEventList(GenericEvent<List> e) {
        Leg.a("" + e);
    }

    @Handler
    public void onGenEventMap(GenericEvent<Map> e) {
        Leg.a("" + e);
    }

    @Handler
    public void onGenEventArrayList(GenericEvent<ArrayList> e) {
        Leg.a("" + e);
    }

    @Handler
    public void onGenEventHashMap(GenericEvent<HashMap> e) {
        Leg.a("" + e);
    }

produces the following output:

10-10 22:25:28.384    1890-1890/com.sdchang.testbed A/BaseActivity#73 (onGenEventArrayList)﹕ java.util.List
10-10 22:25:28.384    1890-1890/com.sdchang.testbed A/BaseActivity#53 (onGenEvent)﹕ java.util.List
10-10 22:25:28.384    1890-1890/com.sdchang.testbed A/BaseActivity#78 (onGenEventHashMap)﹕ java.util.List
10-10 22:25:28.392    1890-1890/com.sdchang.testbed A/BaseActivity#63 (onGenEventList)﹕ java.util.List
10-10 22:25:28.392    1890-1890/com.sdchang.testbed A/BaseActivity#58 (onGenEventQuestion)﹕ java.util.List
10-10 22:25:28.392    1890-1890/com.sdchang.testbed A/BaseActivity#68 (onGenEventMap)﹕ java.util.List
10-10 22:25:28.396    1890-1890/com.sdchang.testbed A/BaseActivity#73 (onGenEventArrayList)﹕ java.util.ArrayList
10-10 22:25:28.396    1890-1890/com.sdchang.testbed A/BaseActivity#53 (onGenEvent)﹕ java.util.ArrayList
10-10 22:25:28.396    1890-1890/com.sdchang.testbed A/BaseActivity#78 (onGenEventHashMap)﹕ java.util.ArrayList
10-10 22:25:28.396    1890-1890/com.sdchang.testbed A/BaseActivity#63 (onGenEventList)﹕ java.util.ArrayList
10-10 22:25:28.396    1890-1890/com.sdchang.testbed A/BaseActivity#58 (onGenEventQuestion)﹕ java.util.ArrayList
10-10 22:25:28.400    1890-1890/com.sdchang.testbed A/BaseActivity#68 (onGenEventMap)﹕ java.util.ArrayList

Is this expected?
I hope that only handlers with classes that are compatible with the message are called.

Thank you.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions