0

私はJavaを使用しており、この階層を持っています

class Seq

class For extends Seq

interface SeqIt

Class ForIt implements SeqIt

そしてForItコンストラクタがあります: public ForIt( For x ) //takes For objects

今まではすべて正常に動作しています。ここで、作成したすべてのオブジェクトにFUアクセスできる、という名前の新しいクラスを作成したいと考えています。ForItこのFUクラスには、このシグネチャを持つメソッドが必要public static int sum1(For MyFor) です。たとえば、ForIt オブジェクトの内部に myArr という配列がある場合です。このメソッド sum1 は、 MyFor オブジェクト内の配列 myArr のすべての要素の合計を返すことになっています

このクラスを作成するにはどうすればよいFUですか?

4

2 に答える 2

0

私が考えることができる2つの方法は次のとおりです。

  • クラスを作成するたびForItに、それをクラスに追加します。FU完了したら、sum メソッドを呼び出します
  • クラスコンストラクターにForItクラスの静的メソッドを呼び出して、新しいものが作成されFUたことを知らせますForIt

個人的にはオプション 1 を使用します。これは、作業が面倒な静的変数を回避するためです。オプション 2 は、単純なユース ケースで機能します。

//not thread safe
class FU {
    private final List<ForIt> list = new ArrayList<> ();
    private int sum = 0;

    void add(ForIt fi) {
        list.add(fi);
        sum += fi.getValue();
    }

    int sum() {
        return sum;
    }
}

オプション 1 はかなり簡単です (オブジェクトを作成し、インスタンスFUを作成するたびにそれをオブジェクトに追加します)。 オプション 2:ForItFU

class ForIt {
    private static final FU fu = new FU();

    ForIt() {
        fu.add(this);
    }

    static int sum() {
        return fu.sum();
    } 
}

public static void main(String... args) {
    new ForIt();
    new ForIt();
    System.out.println(ForIt.sum());
}
于 2012-11-14T07:26:55.060 に答える
-1

あなたの説明から、次のような FU クラスのインスタンス変数として ForIt を作成できます。

public class FU {
    public ForIt forit; // Now you have access to ForIt object

    public static int sum1(For MyFor) {
         // Iterate array in ForIt instance
         FU fu = new FU();
         for (int something: fu.forit.myArr){
                ...........
         }
         ........
    }

}
于 2012-11-14T06:59:02.657 に答える