u634781 2009-12-17 16:49
浏览 189
已采纳

core java的一个例子--java的静态内部类干嘛的?

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呢?

  • 写回答

1条回答 默认 最新

  • ccnunlp 2009-12-18 08:46
    关注

    内部类需要的原因主要是为了体现OOP封装性的优势。

    静态内部类和普通内部类没有太大区别。在上面的代码中Pair类不需要使用其外层类ArrayAlg的数据域,那么就完全可以使用静态类。

    还有一点:minmax()方法是ArrayAlg的静态方法,在其中构造一个内部类对象,这个内部类必须是静态的。就像是直接使用静态数据域的方法必须也是静态方法一样的道理。

    ArrayAlg好像有点多余吧,怎么不直接定义一个类Pair,以及Pair里面的方法minmax呢?

    这个问题主要是每个人的OOP设计经验不同而已。minmax方法的作用是为了找到数组中的最大,最小两个值,然后组成一个Pair数据对。和Pair类本身并没有逻辑上的联系。如果将minmax方法理解为操作数组的一个工具方法,更加合理些。

    想一想为什么JDK类库中有Array类,还需要一个Arrays工具类,而且所有对Array类的工具操作sort都属于Arrays。这就是大师考虑问题的经验了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程