java:如何创建访问所有接口对象的类

时间:2012-11-14 06:44:01

标签: java class methods interface

我正在使用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

2 个答案:

答案 0 :(得分:0)

我能想到的两种方式是:

  • 每次创建ForIt课程时,请将其添加到FU课程中 - 完成后,请调用总和方法
  • 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());
}

答案 1 :(得分:-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){
                ...........
         }
         ........
    }

}