目次 | 前項目 | 次項目 内部クラス仕様


補足例: 調整済内部クラスを持つ API

クラスベースの API は、基本的な機能として第 2 のクラスまたはインタフェースを有する場合があります。これら後者のものは、メインクラスの static 内部クラスとしてごく自然に構造化できます。

この例を見るには、インタフェース Comparer を持った仮説のユーティリティ Sort を想像してください。このインタフェースは比較操作とたくさんの標準の再利用可能な比較実装を仮想化します。(この例には欠点があります: Comparer は自立するにはあまりに一般的です。) コードは次のようにします:

    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) {...}
        ...
    }


目次 | 前項目 | 次項目

内部クラス仕様 (HTML generated by dkramer on March 15, 1997)
Copyright (c) 1996, 1997 Sun Microsystems, Inc. All rights reserved
コメントや訂正は john.rose@eng.sun.com 宛てに送ってください。