<< Chapter < Page Chapter >> Page >
In Java, besides having fields and methods, a class can also have other classes as members. Just like fields and methods, a class member of can be static or non-static. A non-static class member is called an inner class. Inner class is a programming construct based on the powerful concept of closure prevalent in the functional programming paradigm. It allows on-the-fly creation of objects, which can communicate transparently with the enclosing object inside of which they come into existence. We illustrate the rationale and use of inner classes via a progression from top level helper classes to named static nested classes, to non-static named classes, and to anonymous inner classes with dynamic on-the-fly instantiation.

1. helpers are the variants

Consider again the familiar problem of computing a String representation of an IList that displays a comma-separated list of its elements delimited by a pair of matching parentheses. We have seen at least one way to compute such a String representation using a visitor called ToStringAlgo . Below are three different algorithms, ToString1 , ToString2 and ToString3 , that compute the same String representation.

Main Visitor ToString1 Tail-recursive helper ToString1Help
package listFW.visitor; import listFW.*;public class ToString1 implements IListAlgo {public static final ToString1 Singleton = new ToString1();private ToString1() {} public Object emptyCase(IMTList host, Object... nu) { return "()";}public Object nonEmptyCase( INEList host, Object... nu) {return host.getRest().execute( ToString1Help.Singleton,"(" + host.getFirst()); }} /** * Helps ToString1 compute the String* representation of the rest of the list. * It takes as input the accumulated* string representation of the preceding * list. This accumulated string contains* the left most parenthesis and all the * elements of the preceding list, each* separated by a comma. */class ToString1Help implements IListAlgo { public static final ToString1HelpSingleton = new ToString1Help(); private ToString1Help() {}public Object emptyCase( IMTList host, Object... acc) {return acc[0] + ")";}public Object nonEmptyCase( INEList host, Object... acc) {return host.getRest().execute(this, acc[0]+ ", " + host.getFirst());} }
Main Visitor ToString2 Tail-recursive helper ToString2Help
package listFW.visitor; import listFW.*;public class ToString2 implements IListAlgo {public static final ToString2 Singleton = new ToString2();private ToString2() {}public Object emptyCase(IMTList host, Object... nu) {return "()"; }public Object nonEmptyCase(INEList host, Object... nu) {return host.getRest().execute( ToString2Help.Singleton,host.getFirst().toString()); }} /** * Helps ToString2 compute the Stringrepresentation of the rest of the list. */class ToString2Help implements IListAlgo { public static final ToString2HelpSingleton = new ToString2Help(); private ToString2Help() {}public Object emptyCase( IMTList host, Object... acc) {return "(" + acc[0]+ ")"; }public Object nonEmptyCase( INEList host, Object... acc) {return host.getRest().execute(this, acc[0]+ ", " + host.getFirst());} }

Get Jobilize Job Search Mobile App in your pocket Now!

Get it on Google Play Download on the App Store Now




Source:  OpenStax, Principles of object-oriented programming. OpenStax CNX. May 10, 2013 Download for free at http://legacy.cnx.org/content/col10213/1.37
Google Play and the Google Play logo are trademarks of Google Inc.

Notification Switch

Would you like to follow the 'Principles of object-oriented programming' conversation and receive update notifications?

Ask