0

これがどこかに答えがある場合は許してください。何を検索すればよいかよくわかりませんでした... また、Java と OOP をまだ学習しているため、用語がオフになっている可能性があります (宣言、インスタンス化など)。

私は教科書を読んでいました: Data Structures and Abstractions, 3rd Ed by Frank Carrano (第 20 章: 辞書の実装)、プライベート内部クラスを含む非常に標準的なクラスに出くわしました。しかし、私がよく理解していない方法論について何かがあります。

オブジェクト(またはオブジェクトの配列)を外部クラスのフィールドとして宣言し、コンストラクターで一時オブジェクトをインスタンス化し、属性をインスタンス化するだけでなく、フィールドを一時オブジェクトとして初期化する理由を理解するのに苦労していますコンストラクターでそれ自体。

編集:型パラメーターをコードに追加し直しました...辞書を使用しているため、この場合はキーと値に K & V が使用されます。それが質問にとって重要かどうかはわかりません...

ここで問題のコードを書き直し、クラスなどの名前を変更して、ローカライズされないようにしました。

public class OuterClass<K, V> implements SomeInterface<K, V>
{
     private InnerClass<K, V>[] foo;                  // Declare array of inner class object
     private final static int CAPACITY = 10;    // Initial Array Capacity

     // Outer Class Constructor
     public OuterClass()
     {
          InnerClass<K, V>[] tempFoo = (InnerClass<K, V>[])new InnerClass[CAPACITY];
          foo = tempFoo;
     }

     // ...

     private class InnerClass<S, T>
     {
          // Inner Class Constructor
          private InnerClass()
          {
               // ...
          }

          // ...
     }
}

前述のように、質問に関連しているとは思わないため、コード内の特定の詳細を取り除こうとしました。外部クラスのコンストラクターでこれを行うだけではない理由はありますか:

foo = (InnerClass[])new InnerClass[CAPACITY];

それ以外の:

InnerClass[] tempFoo = (InnerClass[])new InnerClass[CAPACITY];
foo = tempFoo;
4

3 に答える 3

3

投稿したコードには目的がありません。ただし、オブジェクトのインスタンス化で例外がスローされる可能性があり、それを処理する必要がある場合は、この一般的な方法を使用するユースケースがよくあります。次のようなことを考えてみましょう:

private final Image image;

public MyClass() {
    image = ImageIO.read(new File("myImage.png"));
}

可能性を扱っていないため、これはコンパイラ エラーになりますIOException。したがって、次のようなことをしなければなりません。つまり、中間変数が必要です。

public MyClass {
    Image image = null;
    try {
        image = ImageIO.read(new File("myImage.png"));
    }
    catch(IOException ioe) {
        //Perform logging, whatever
    }
    this.image = image;
}

...だから、貼り付けたコードに意味がないからといって、そのようなテクニックの使用法が決してないとは思わないでください。もちろん、これはfinal変数の場合にのみ当てはまります。

于 2014-04-08T20:03:53.713 に答える
-1

はい、メノさんの言うとおりです。意味がありません。

于 2014-04-08T20:04:01.533 に答える