Using inner classes for callbacks : Inner Class « Class « Java






Using inner classes for callbacks

Using inner classes for callbacks
  

// : c08:Callbacks.java
// Using inner classes for callbacks
// From 'Thinking in Java, 3rd ed.' (c) Bruce Eckel 2002
// www.BruceEckel.com. See copyright notice in CopyRight.txt.

interface Incrementable {
  void increment();
}

// Very simple to just implement the interface:

class Callee1 implements Incrementable {
  private int i = 0;

  public void increment() {
    i++;
    System.out.println(i);
  }
}

class MyIncrement {
  void increment() {
    System.out.println("Other operation");
  }

  static void f(MyIncrement mi) {
    mi.increment();
  }
}

// If your class must implement increment() in
// some other way, you must use an inner class:

class Callee2 extends MyIncrement {
  private int i = 0;

  private void incr() {
    i++;
    System.out.println(i);
  }

  private class Closure implements Incrementable {
    public void increment() {
      incr();
    }
  }

  Incrementable getCallbackReference() {
    return new Closure();
  }
}

class Caller {
  private Incrementable callbackReference;

  Caller(Incrementable cbh) {
    callbackReference = cbh;
  }

  void go() {
    callbackReference.increment();
  }
}

public class Callbacks {

  public static void main(String[] args) {
    Callee1 c1 = new Callee1();
    Callee2 c2 = new Callee2();
    MyIncrement.f(c2);
    Caller caller1 = new Caller(c1);
    Caller caller2 = new Caller(c2.getCallbackReference());
    caller1.go();
    caller1.go();
    caller2.go();
    caller2.go();
  }
} ///:~


           
         
    
  








Related examples in the same category

1.Nested classes can access all members of all levels of the classes they are nested within
2.Creating inner classesCreating inner classes
3.Creating instances of inner classes
4.Returning a reference to an inner classReturning a reference to an inner class
5.Nesting a class within a scope
6.Putting test code in a nested class
7.Inheriting an inner class
8.Creating a constructor for an anonymous inner classCreating a constructor for an anonymous inner class
9.This file is to show what happens if you try to access an inner class created in another class
10.Demonstrate an Inner Child classDemonstrate an Inner Child class
11.Demonstrate simple inner classDemonstrate simple inner class
12.Just to show that there is no such thing as inner methods in Java
13.A named inner class is used to
14.An inner class cannot be overriden like a methodAn inner class cannot be overriden like a method
15.Proper inheritance of an inner classProper inheritance of an inner class
16.Holds a sequence of Objects
17.With concrete or abstract classes, inner classes are the only way to produce the effect
18.Nested Class Static
19.Compiler will generate a synthetic constructor since SyntheticConstructor() is private
20.Accessing its enclosing instance from an inner class
21.This program demonstrates the use of inner classes
22.This program demonstrates the use of local inner classes
23.This program demonstrates the use of static inner classes