// runnable takes an argument static A onLeftClick(final A c, fO runnable) { swing { c.addMouseListener(leftClickMouseAdapter(runnable)); } ret c; } // runnable takes no args static TrayIcon onLeftClick(final TrayIcon c, final O runnable) { swing { c.addMouseListener(leftClickMouseAdapter_noPt(runnable)); } ret c; } static A onLeftClick(fO runnable, A c) { ret onLeftClick(c, runnable); }