#java #generics #vector #arraylist
#java #общие сведения #вектор #arraylist
Вопрос:
Я пытаюсь добиться универсального поведения класса foo_unknown, который вызывает методы foo_func1(), foo_func2(); и это зависит от типа объектов, определенных в конструкторе класса foo, которые вызываются реализациями методов foo_func1() и foo_func2(). Также приветствуется любой новый революционный шаблон проектирования. Который решает все проблемы.
Комментарии:
1. Вам действительно нужно уточнить, что вы пытаетесь сделать. В чем именно проблема, с которой вы столкнулись в своем коде? Вы понимаете, что делает интерфейс в Java? Также кажется, что это может быть проблемой.
2. Есть ли причина, по которой вы не хотите определять абстрактные foo_func1 и foo_func2 в базовом классе?
3. Спасибо за ответ, Брайан. Я знаю об интерфейсах. Я реализую генетический алгоритм. Классы foo1 и foo2, скажем, относятся к разным областям задач. foo_controller — это класс генетического алгоритма, который вызывает различные функции в классах foo1 (crossover, fitness) и foo2. Итак, вы предлагаете определить интерфейс foo и назначить этот foo как поле в foo_controller, в то время как foo1 и foo2 реализуют этот интерфейс. Хорошее предложение, я попробую это.
4. Из того, что вы описываете здесь, звучит так, как будто вы хотите реализовать шаблон стратегии .
5. Кстати, обычным соглашением является использование имен с заглавной буквы для классов и строчных букв только для методов и (нестатических-конечных) переменных. (И если вы хотите ответить конкретному человеку, включите ‘@ name’, например ‘@pulkittomar’, в ответный комментарий. Затем они автоматически уведомляются.)
Ответ №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());
}
}
(Предупреждение: не скомпилировано, не протестировано, требуется обработка исключений и т.д.)
Комментарии:
1. Спасибо, сейчас я внедряю этот подход. Я попробую это.
2. почему бы просто
this.fooUnknown[i] = clazz.newInstance();