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. interface Foo {
  8. void foo();
  9. }
  10. interface Bar {
  11. void bar();
  12. }
  13. interface FooBar extends Foo, Bar {
  14. public static FooBar combine(Foo f, Bar b) {
  15. return new FooBar() {
  16. public void foo() { f.foo(); }
  17. public void bar() { b.bar(); }
  18. };
  19. }
  20. }
  21.  
  22. class Parent {
  23. protected String neededByFoo = "foo";
  24. protected String neededByBar = "bar";
  25.  
  26. public void fooA() {
  27. System.out.println(neededByFoo + "A");
  28. }
  29. public void fooB() {
  30. System.out.println(neededByFoo + "B");
  31. }
  32. public void barA() {
  33. System.out.println(neededByBar + "A");
  34. }
  35. public void barB() {
  36. System.out.println(neededByBar + "B");
  37. }
  38.  
  39. public static void main(String[] args) {
  40. Parent p = new Parent();
  41. foobar(FooBar.combine(p::fooA, p::barA));
  42. foobar(FooBar.combine(p::fooA, p::barB));
  43. foobar(FooBar.combine(p::fooB, p::barA));
  44. foobar(FooBar.combine(p::fooB, p::barB));
  45. }
  46. private static void foobar(FooBar fb) {
  47. fb.foo();
  48. fb.bar();
  49. }
  50. }
Success #stdin #stdout 0.21s 33436KB
stdin
Standard input is empty
stdout
fooA
barA
fooA
barB
fooB
barA
fooB
barB