core java的一个例子:
[code="java"]
public class StaticInnerClassTest
{
public static void main(String[] args)
{
double[] d = new double[20];
for (int i = 0; i < d.length; i++)
d[i] = 100 * Math.random();
ArrayAlg.Pair p = ArrayAlg.minmax(d);
System.out.println("min = " + p.getFirst());
System.out.println("max = " + p.getSecond());
}
}
class ArrayAlg
{
public static class Pair
{
public Pair(double f, double s)
{
first = f;
second = s;
}
public double getFirst()
{
return first;
}
public double getSecond()
{
return second;
}
private double first;
private double second;
}
public static Pair minmax(double[] values)
{
double min = Double.MAX_VALUE;
double max = Double.MIN_VALUE;
for (double v : values)
{
if (min > v) min = v;
if (max < v) max = v;
}
return new Pair(min, max);
}
}
[/code]
这里面的ArrayAlg好像有点多余吧,怎么不直接定义一个类Pair,以及Pair里面的方法minmax呢?
内部类需要的原因主要是为了体现OOP封装性的优势。
静态内部类和普通内部类没有太大区别。在上面的代码中Pair类不需要使用其外层类ArrayAlg的数据域,那么就完全可以使用静态类。
还有一点:minmax()方法是ArrayAlg的静态方法,在其中构造一个内部类对象,这个内部类必须是静态的。就像是直接使用静态数据域的方法必须也是静态方法一样的道理。
ArrayAlg好像有点多余吧,怎么不直接定义一个类Pair,以及Pair里面的方法minmax呢?
这个问题主要是每个人的OOP设计经验不同而已。minmax方法的作用是为了找到数组中的最大,最小两个值,然后组成一个Pair数据对。和Pair类本身并没有逻辑上的联系。如果将minmax方法理解为操作数组的一个工具方法,更加合理些。
想一想为什么JDK类库中有Array类,还需要一个Arrays工具类,而且所有对Array类的工具操作sort都属于Arrays。这就是大师考虑问题的经验了。