静态嵌套类JAVA的安全性

时间:2017-01-02 04:13:10

标签: java class object static encapsulation

我应该编写这段代码,以便ArrIg是一个静态的嵌套类。但是,我将它们声明为独立类,但代码仍按预期运行。我明白为什么它还在运行。

我知道 static 会阻止在调用Pair时调用ArrIg对象(假设ArrIg是Pair的嵌套类)。此外,这违反了静态嵌套类的语法,但它仍然有效。我将此代码暴露给了哪些危险?

public class ClassPair {

  public static void main(String[] args) {
    // TODO Auto-generated method stub

    int[] Ig= {1,2,3,4};
    Pair pair= ArrIg.minmax(Ig);

    System.out.print("min :"+pair.getFirst()+" | max :"+pair.getSecond());
  }

}


class Pair {
  public Pair(int a, int b){
    first=a;
    second=b;
  }

  public int getFirst(){
    return first;
  }
  public int getSecond(){
    return second;
  }

  private int first, second=0;    
}


class ArrIg{

  public static Pair minmax(int [] a){

    int min= a[0];//1
    int max=a[0];//1

    for(int i=0; i<a.length;i++){

      if (min>a[i]) min =a[i];//1
      if (max<a[i]) max=a[i];//2,3,4
    }

    return new Pair(min ,max);
  }

}

1 个答案:

答案 0 :(得分:0)

访问修饰符和嵌套类不是安全机制。实际上,通过反思来规避它们是非常微不足道的。 (可能重要的唯一情况是,如果您尝试实施具有安全沙箱的系统。

访问修饰符和嵌套类的真正目的是提供封装。它涉及设计泄漏(不需要的依赖性),而不是信息泄漏和更普遍的安全问题。

在这个特定的例子中,(假设的)危险是Pair可以在ClassPair封装之外被实例化和使用。这可能(假设)是有害的,但对于类似Pair类的东西,允许这可能是好东西

我还要补充一点,如果您希望人们了解您所说的内容,则需要正确使用该术语。例如,“调用”一个对象没有意义。您调用方法 ...而不是对象。