package io.dico.dicore.event; @SuppressWarnings("unchecked") public class ChainedListeners { private static final ChainedListener empty = new ChainedListener() { @Override public void accept(Object event) { } @Override public ChainedListener withElement(SimpleListener other) { return ChainedListeners.singleton(other); } @Override public int getElementCount() { return 0; } @Override public SimpleListener getDelegateOfLastNode() { return null; } }; private ChainedListeners() { } public static ChainedListener empty() { return (ChainedListener) empty; } public static ChainedListener singleton(SimpleListener element) { if (element instanceof ChainedListener) { return (ChainedListener) element; } if (element == null) { return empty(); } return new ChainedListener() { @Override public void accept(T event) { element.accept(event); } @Override public SimpleListener getDelegateOfLastNode() { return element; } }; } }