Java的。检查接口的匿名实现的类型

时间:2013-05-18 22:52:55

标签: java interface implementation anonymous

我正在使用wicket,构建一个解耦组件。在使用事件驱动机制让组件进行通信时,我在类“GenericComponent”中保留了一个Set。 基本思想是发送一个事件,其中“Someevent.class”作为从IGenericEvent扩展的有效负载。然后在GenericComponent类的onEvent方法中,遍历添加到Set的所有事件。如果类匹配有效负载,则应该执行该事件。

现在有些代码:

GenericComponent

public class  GenericComponent<T> extends GenericPanel<T>
{
//...
    protected Set<IGenericEvent>eventSet = new HashSet<IGenericEvent>(); 
//...

    public void addEvent(final IGenericEvent event)
    {
        boolean result = eventSet.add(event);
        if (!result)
        {

            throw new IllegalArgumentException("Event already added ...");
        }
    }

    @Override
    public void onEvent(final IEvent<?> event)
    {
        for (IGenericEvent e : eventSet)
        {

            if (e.getClass().equals(event.getPayload()))
            {

                e.action(this.getContainer());
            }

        }
        update();
    }

}

IGenericEvent

public interface  IGenericEvent
{

    public void action(final WebMarkupContainer container);

}

HideEvent

public class Hide implements IGenericEvent, Serializable
{
    private static final long serialVersionUID = 1L;

    @Override
    public void action(WebMarkupContainer container)
    {
        container.setVisible(false);

    }

}

问题:

如果我如前所述定义实现IGenericEvent的onAction事件,那么一切都还可以。

问题是我在页面中自己做的,作为界面的匿名实现。然后,这个类将是PageSomething $ 1,2,3。

errorMessage.add(new Hide()
{
    private static final long serialVersionUID = 1L;

    @Override
    public void onAction(Component component)
    {
        System.out.println("here");
    }


});

我已经尝试过isAsignableFrom和Class.isIntance,但它确实有意义;匿名实现的类是PageSomething。所以isAsignableFrom或isInstance不适用。

我拒绝相信我应该使用一些泛型来获得正在使用的实际类/接口。像

这样的东西

AbstractEvent<Hide>.

我希望你们能理解这个问题。

提前致谢。

0 个答案:

没有答案