Contents | Prev | Next Inner Classes Specification

Further Example: An API with coordinated inner classes

Sometimes a class-based API will include as an essential feature secondary classes or interfaces. These latter can be structured quite naturally as static inner classes of the main class.

To see an example of this, imagine a hypothetical utility Sort with an interface Comparer which virtualizes the comparison operation, and a handful of standard reusable comparison implementations. (This example has a flaw: Comparer is generic enough to stand alone.) The code might look like this:

    public class Sorter {
        public interface Comparer {
            /** Returns <0 if x < y, etc. */
            int compare(Object x, Object y);
        public static void sort(Object keys[], Comparer c) {...}
        public static void sort(Object keys[], Comparer c,
                                Object values[]) {...}
        public static void sort(String keys[], Object values[])
            { sort(keys, stringComparer, values); }
        public static class StringComparer implements Comparer {
            public int compare(Object x, Object y) {
                if (x == null)  return (y == null) ? 0 : -1;
                if (y == null)  return 1;
                return x.toString().compareTo(y.toString());
        public static final Comparer stringComparer
                = new StringComparer();
        public static class LongComparer implements Comparer {
                ... long lx = ((Number)x).longValue(); ...
        public static final Comparer longComparer
                = new LongComparer();
        /** Compose 2 comparisons, presumably on distinct sub-keys. */
        public static class CombinedComparer implements Comparer {...}
        public static Comparer combine(Comparer c1, Comparer c2) {...}

Contents | Prev | Next

Inner Classes Specification (HTML generated by dkramer on March 15, 1997)
Copyright © 1996, 1997 Sun Microsystems, Inc. All rights reserved
Please send any comments or corrections to