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

我能想到的两种方法是:

  • 每次创建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对象,每次创建ForIt实例时,将其添加到FU对象中)。
选项 2:

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

根据您的描述,您可以将 ForIt 作为 FU 类中的实例变量,如下所示:

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 回答