今天写程序碰上这么个问题
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了。