除了使一个类成为内部类之外,将类的实例绑定到另一个类?

时间:2014-04-23 17:54:59

标签: java

我正在编写各种组件的模拟,有些是动态的。最合乎逻辑的结构是这样的:

class Simulation {
  int getSimulationTime() {
    ...
  }
  class Thing1 {
    ...
  }
  class Thing2 {
    ...
  }

  Container <Thing1> box1;
  Container <Thing2> box2;
  ...
  void addThing1(Thing1 thing) {
     box1.add(thing);
  }
  Thing1 getThing1() {
     return box1.getOne();
  }
  ...
}

这个结构至少有两件好事:

  1. Thing1Thing2可以访问模拟时间,而无需明确随身携带Simulation

  2. 类型系统将确保我不会意外地混淆两种不同模拟的组件:如果我写simulation1.addThing1(simulation2.getThing1());,编译器将(正确地)拒绝它,因为生成的Thing1是与Thing1要求的类型不同。

  3. 问题

    实际的Thing1Thing2类定义太大了,我想要推入Simulation类,Java不允许内部类定义被拔出分成单独的文件。有没有其他方法可以实现这些目标?

    部分解决方案

    我刚刚意识到我至少可以使用泛型来帮助完成第二部分 在外部,通过使用内部类为模拟的每个实例提供不同的类型标识:

    class Simulation {
       class Identity {
          Identity(){}
       }
       Container<Thing1<Identity>> box1;
       Thing1<Identity> getThing1() {
          return box1.getOne();
       }
       void addThing1(Thing1<Identity> thing1) {
          box1.add(thing1);
       }
    }
    
    class Thing1<ID> {
       ...
    }
    

    现在,如果我尝试simulation1.addThing1(simulation2.getOne()),我会收到错误,因为相关的Thing1又有不同的类型。然而,这个解决方案不够漂亮,并且不能很好地处理可见性。

0 个答案:

没有答案