JAVA静态上下文引用问题

来源:互联网 发布:青岛seo服务 编辑:程序博客网 时间:2024/05/29 11:28

今天写程序碰上这么个问题

class ArrayAlg{    class Pair{        private int max;        private int min;        public Pair(int max, int min) {            this.max = max;            this.min = min;        }        public int getMax() {            return max;        }        public int getMin() {            return min;        }    }    public static Pair minmax(int[] arr)    {        int max=Integer.MIN_VALUE;        int min=Integer.MAX_VALUE;        for(int i:arr)        {            if(i>max)max=i;            if(i<min)min=i;        }        return new Pair(max,min);    //报错:无法从静态上下文中引用非静态变量this    }}

想了想发现问题所在,于是把代码改成这样就可以通过编译:

class Pair{    private int max;    private int min;    public Pair(int max, int min) {        this.max = max;        this.min = min;    }    public int getMax() {        return max;    }    public int getMin() {        return min;    }}class ArrayAlg{    public static Pair minmax(int[] arr)    {        int max=Integer.MIN_VALUE;        int min=Integer.MAX_VALUE;        for(int i:arr)        {            if(i>max)max=i;            if(i<min)min=i;        }        return new Pair(max,min);    }

因为在静态方法minmax中最后返回了一个Pair实例,如果Pair是ArrayAlg的一个内部类的话,当ArrayAlg未实例化时,是不存在Pair的,因此调用Pair的构造方法肯定报错。

把Pair拉出来是一种解决方法,另一种便是在ArrayAlg内部把Pair定义为静态内部类,那么就可以直接使用Pair了。

1 0