|
Java форум JavaTalks форум программистов
|
|
|
|
| Предыдущая тема :: Следующая тема |
| Автор |
Сообщение |
trarex : 123 Новичок Откуда: Киев
|
Фев 03, 2012 15:23 |
|
|
Есть примерно следующий код:
| Код: |
class Class1 extends Class2 {
void cannotRenameMethod() {
//some commands
}
}
|
Нужно реализовать следующее:
| Код: |
class Class1 extends Class2 {
void cannotRenameMethod() {
thread1_declaration {
//some commands
}
thread1.start();
//additional commands new
}
}
|
Проблема в том, что второй вариант нужно реализовать примерно в 20-30 классах, а просто добавление по 10-20 одинаковых строк в 20-30 классов (а потом еще в каждый новый, коих будет очень много) не разрешат. Собственно вопрос, как это все "причесать", что бы в каждый из многих классов добавлять минимум кода? Мне кто-то шепнул слово "аннотация", но с ними я "не очень".
Родительский класс правитель нельзя, если что. |
|
|
|
 |
мсье клоц : 562 Постоянный посетитель
|
Фев 03, 2012 16:10 |
|
|
А есть возможность сделать другой класс, который бы реализовывал одинаковости?
| Код: |
class Class1 extends Class2 {
void cannotRenameMethod() {
thread1_declaration {
//some commands
}
thread1.start();
}
} |
| Код: |
class AnotherClass extends Class1 {
void cannotRenameMethod() {
super.cannotRenameMethod();
//additional commands new
}
} |
|
|
|
|
 |
trarex : 123 Новичок Откуда: Киев
|
Фев 03, 2012 16:31 |
|
|
Возможность то есть, но вот также дело в том, что для каждого из 20-30 классов набор команд
разный(надо было написать //some list1 of commands), по-этому
| Код: |
| super.cannotRenameMethod(); |
для каждого случая будет другим, что означает создание большого количества классов AnotherClass, что не на много лучше, чем добавление в каждый класс по 10-20 одинаковых строк |
|
|
|
 |
мсье клоц : 562 Постоянный посетитель
|
Фев 03, 2012 16:34 |
|
|
Класс, а что именно у них одинаковое, в смысле, есть ли какая-то закономерность?
Я-то предлагал не готовое решение, а идею: вычленить общее и пихнуть в отдельный класс, от которого затем и наследоваться. |
|
|
|
 |
trarex : 123 Новичок Откуда: Киев
|
Фев 03, 2012 16:42 |
|
|
если по сути, то в каждом i классе есть свой метод
| Код: |
void cannotRenameMethod_name#i() {
// realization_#i
}
|
для каждого метода нужно по сути сделать следующее:
| Код: |
void cannotRenameMethod_name#i() {
thread_declaration {
// realization_#i
// some thread flags, the same for every realization
}
thread.start();
// additional commands, the same for every method
}
|
Структура проекта такова:
ParentClass //cannot change
|---->Class1 -> void cannotRenameMethod_name#1
|---->Class2 -> void cannotRenameMethod_name#2
|---->...
|---->Classi -> void cannotRenameMethod_name#i
|---->...
|---->ClassN -> void cannotRenameMethod_name#N
N ~ 20-30
==============================
update: проблема решена(скорее всего, решение еще не проверял), тему можно закрыть  |
|
|
|
 |
мсье клоц : 562 Постоянный посетитель
|
Фев 03, 2012 17:27 |
|
|
Где-то в документации читал, что аннотации позволяют сгенерировать куски кода по шаблону, так что, скорее всего, так и следует это делать. Однако это практически всё, что мне о них известно.
| trarex писал(а): |
update: проблема решена(скорее всего, решение еще не проверял), тему можно закрыть  |
Каким способом, может, и мне пригодится? xD |
|
|
|
 |
trarex : 123 Новичок Откуда: Киев
|
Фев 03, 2012 18:01 |
|
|
не знаю, работает или нет - не проверял
идея такова:
| Код: |
Class2 -->AddFunctionalityClass --> Class1
abstract class AddFunctionalityClass() {
methodWithThreadAndNeededRealization() {
//bla-bla-bla
testSingleName();
//bla-bla-bla
}
absrtact testSingleName();
} |
наверное стоило добавить, что у меня cannotRenameMethod_name#i должен иметь одно и от же начало, а именно testXXX |
|
|
|
 |
Vantuz-Subhuman : 660 Постоянный посетитель Откуда: издиснейленда
|
Фев 03, 2012 18:36 |
|
|
| trarex писал(а): |
не знаю, работает или нет - не проверял
идея такова:
| Код: |
Class2 -->AddFunctionalityClass --> Class1
abstract class AddFunctionalityClass() {
methodWithThreadAndNeededRealization() {
//bla-bla-bla
testSingleName();
//bla-bla-bla
}
absrtact testSingleName();
} |
наверное стоило добавить, что у меня cannotRenameMethod_name#i должен иметь одно и от же начало, а именно testXXX |
Это вы юнит-тесты так пишете? И вам нужно, чтобы они в разных потоках работали? _________________ «One should never underestimate the predictability of stupidity»,
«Never attribute to malice that which can be adequately explained by stupidity» |
|
|
|
 |
trarex : 123 Новичок Откуда: Киев
|
Фев 03, 2012 18:39 |
|
|
| нет, нужно реализовать проверку времени выполнения (что бы не превышало timeout) теста. проблема в том, что проект на android, и использовать @Test(timeout=XXX) не представляется возможным. Данная аннотация просто игнорится |
|
|
|
 |
loptop : 143 Новичок
|
Фев 04, 2012 22:06 |
|
|
А что если создать абстрактный класс(Parent), который будет родительским к классам которые должны делать доп. работу(сделать в ней функцию work()). Потом от него реализовать 1...N классов, которые будут реализовывать эту функцию и будут отличатся реализацией(например DoSlow,DoFast).
И соответственно нужно будет только передавать или создавать в каждом классе один из дочерних экземпляров класса Parent, и работать с ним. |
|
|
|
 |
mesier : 693 Постоянный посетитель Откуда: Новокузнецк
|
Фев 05, 2012 5:05 |
|
|
| trarex писал(а): |
Проблема в том, что второй вариант нужно реализовать примерно в 20-30 классах, а просто добавление по 10-20 одинаковых строк в 20-30 классов (а потом еще в каждый новый, коих будет очень много) не разрешат. Собственно вопрос, как это все "причесать", что бы в каждый из многих классов добавлять минимум кода? Мне кто-то шепнул слово "аннотация", но с ними я "не очень".
Родительский класс правитель нельзя, если что. |
Шаблон есть такой - Фабричный метод.
Прям ваш случай! |
|
|
|
 |
|
|
Страница 1 из 1
|
Список форумов
-> Основы языка Java |
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|