【问题标题】:Defining array of unknown type of objects and assign the correct type of objects in the constructor定义未知类型对象的数组并在构造函数中分配正确类型的对象
【发布时间】:2011-04-15 00:36:06
【问题描述】:

我正在尝试实现 foo_unknown 类的通用行为,它调用 foo_func1()、foo_func2() 方法;它取决于调用 foo_func1() 和 foo_func2() 方法实现的 foo 类的构造函数中定义的对象的类型。 也欢迎任何新的革命性设计模式。这可以解决所有问题。

【问题讨论】:

  • 你真的需要澄清你想要做什么。您的代码遇到的确切问题是什么?你了解接口在 Java 中的作用吗?这似乎也可能是问题所在。
  • 有什么理由不想在基类中定义抽象的 foo_func1 和 foo_func2?
  • 感谢布赖恩的回复。我知道接口。我正在实施遗传算法。类 foo1 和 foo2 是说不同的问题域。 foo_controller 是调用 foo1(crossover,fitness) 和 foo2 类中不同函数的遗传算法类。因此,您建议定义一个接口 foo 并将该 foo 分配为 foo_controller 中的字段,而 foo1 和 foo2 实现该接口。好建议我会尝试。
  • 从您在此处描述的内容看来,您希望实现 Strategy Pattern
  • 顺便说一下,通常的约定是对类使用大写的名称,只对方法和(非静态最终)变量使用小写。 (如果您想回复特定的人,请在回复评论中包含“@name”,例如“@pulkittomar”。然后他们会自动收到通知。)

标签: java generics vector arraylist


【解决方案1】:

如果您不反对反思性地这样做,请尝试以下操作:

public FooController(Class<? extends Foo> clazz, int number) {
     this.fooUnknown = Array.newInstance(clazz, number);
     for (int i = 0; i < number; i++) {
         Array.set(this.fooUnknown, i, clazz.newInstance());
     }
}

(警告:未编译,未测试,需要异常处理等)

【讨论】:

  • 谢谢,我现在正在实施该方法。我会试试的。
  • 为什么不只是this.fooUnknown[i] = clazz.newInstance();
猜你喜欢
  • 1970-01-01
  • 2017-06-07
  • 1970-01-01
  • 2019-01-17
  • 2022-08-19
  • 2019-04-22
  • 1970-01-01
  • 2019-04-21
  • 1970-01-01
相关资源
最近更新 更多