fork download
  1. /* package whatever; // don't place package name! */
  2.  
  3. import java.util.*;
  4. import java.lang.*;
  5. import java.io.*;
  6.  
  7. /* Name of the class has to be "Main" only if the class is public. */
  8. class Ideone
  9. {
  10. public static void main (String[] args) throws java.lang.Exception
  11. {
  12. Handler h = new Handler();
  13. h.run();
  14. }
  15. }
  16.  
  17. interface Listener {
  18. public void onEvent();
  19. public void onEventWithArgument(MyEvent e);
  20. }
  21.  
  22. class MyEvent {
  23. // Some properties.
  24. }
  25.  
  26. class ClassWithEvent {
  27. private final List<Listener> _listeners = new ArrayList<Listener>();
  28.  
  29. public void addListener(Listener listener) {
  30. _listeners.add(listener);
  31. }
  32.  
  33. public void removeListener(Listener listener) {
  34. _listeners.remove(listener);
  35. }
  36.  
  37. private void onEvent() {
  38. for (Listener listener : _listeners) {
  39. listener.onEvent();
  40. }
  41. }
  42.  
  43. private void onEventWithArgument() {
  44. MyEvent e = new MyEvent();
  45. for (Listener listener : _listeners) {
  46. listener.onEventWithArgument(e);
  47. }
  48. }
  49.  
  50. public void fireEventWirhArgument() {
  51. onEventWithArgument();
  52. }
  53. }
  54.  
  55. class Handler {
  56. private final Listener handler1 = new Listener() {
  57. @Override
  58. public void onEvent() {
  59. System.out.println("handler 1");
  60. }
  61.  
  62. @Override
  63. public void onEventWithArgument(MyEvent e) {
  64. System.out.println(e.toString());
  65. }
  66. };
  67.  
  68. private final Listener handler2 = new Listener() {
  69. @Override
  70. public void onEvent() {
  71. System.out.println("handler 2");
  72. }
  73.  
  74. @Override
  75. public void onEventWithArgument(MyEvent e) {
  76. System.out.println(e.toString());
  77. }
  78. };
  79.  
  80. public void run() {
  81. ClassWithEvent foo = new ClassWithEvent();
  82. foo.addListener(handler1);
  83. foo.fireEventWirhArgument();
  84.  
  85. ClassWithEvent foo2 = new ClassWithEvent();
  86. foo2.addListener(handler1);
  87. foo2.fireEventWirhArgument();
  88. }
  89. }
Success #stdin #stdout 0.07s 380224KB
stdin
Standard input is empty
stdout
MyEvent@1262f7c
MyEvent@1f784d7