2017-01-02 11 views
-1

ArrIgがペアの静的ネストされたクラスであるように、私はこのコードを書くことになっていました。しかし、私はそれらを独立したクラスとして宣言しましたが、コードはまだ期待通りに実行されました。なぜそれがまだ走ったのか理解しています。静的ネストされたクラスのセキュリティJAVA

staticは、Pairが呼び出されるとArrIgオブジェクトが呼び出されるのを防ぎます(ArrIgはペアのネストされたクラスであると仮定します)。さらに、これは静的ネストされたクラスの構文に違反しましたが、それでも機能しました。このコードを公開している危険性は何ですか?

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

'Pair'クラスではデータを十分にカプセル化していません。そのクラスで作業する必要があります。 – MaxZoom

+0

@MaxZoomプライベートフィールドをfirstとsecondのプライベートフィールドに変更しました。私は内部クラスとしてArrIgを宣言していたので、他の危険性は何もありませんでした。私はコードを – BattleDrum

+0

に公開しました。 – MaxZoom

答えて

0

アクセス修飾子およびネストされたクラスはセキュリティメカニズムではありません。確かに、それを反映させることでそれらを回避するのはかなり簡単です。 (あなたがしようとしている場合は、それかもしれない問題がある唯一のシナリオは、セキュリティサンドボックスでシステムを実装する。

アクセス修飾子とネストされたクラスのための真の目的は、カプセル化を提供することである。それはおよそデザインについてです

この特定の例では、Pairは、ClassPairカプセル化の外でインスタンス化され、使用される可能性があります(仮説的に)有害な可能性があります。しかし、Pairクラスのようなものの場合、これは良いこと


また、あなたが話していることを人々が理解できるようにするには、用語を適切に使用する必要があると付け加えます。たとえば、オブジェクトを "呼び出す"ことは意味がありません。 メソッド ...というオブジェクトには呼び出しません。

関連する問題