我应该编写这段代码,以便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);
}
}
答案 0 :(得分:0)
访问修饰符和嵌套类不是安全机制。实际上,通过反思来规避它们是非常微不足道的。 (可能重要的唯一情况是,如果您尝试实施具有安全沙箱的系统。
访问修饰符和嵌套类的真正目的是提供封装。它涉及设计泄漏(不需要的依赖性),而不是信息泄漏和更普遍的安全问题。
在这个特定的例子中,(假设的)危险是Pair
可以在ClassPair
封装之外被实例化和使用。这可能(假设)是有害的,但对于类似Pair
类的东西,允许这可能是好东西。
我还要补充一点,如果您希望人们了解您所说的内容,则需要正确使用该术语。例如,“调用”一个对象没有意义。您调用方法 ...而不是对象。