forum.bitel.ru http://forum.bitel.ru/ |
|
5.2 Скрипт события http://forum.bitel.ru/viewtopic.php?f=19&t=6896 |
Страница 1 из 1 |
Автор: | Феанор [ 25 июн 2012, 10:12 ] |
Заголовок сообщения: | 5.2 Скрипт события |
Добрый день. Сегодня в канале джабера обсуждалась проблемка одна. В итоге-то все решилось, но мне кажется не самым лучшим способом. Хочется услышать комментарии разработчиков. Тем более самому интересно ввиду скорого перехода на 5.2 Код: package contract.module.voiceip; import ru.bitel.bgbilling.kernel.event.Event; import ru.bitel.bgbilling.kernel.script.server.dev.EventScriptBase; import ru.bitel.bgbilling.server.util.Setup; import ru.bitel.common.sql.ConnectionSet; import ru.bitel.bgbilling.kernel.event.events.ContractParamChangedEvent; import bitel.billing.server.contract.bean.*; public class login extends EventScriptBase { @Override public void onEvent( Event event1, Setup setup2, ConnectionSet connectionSet3 ) throws Exception { int cid = event1.getContractId(); int pid = event1.getParamId(); print(cid); print(pid); } } так не работало, естественно, потому что getParamId() определен у ContractParamChangedEvent. сделать вызов Код: public void onEvent( ContractParamChangedEvent event1, Setup setup2, ConnectionSet connectionSet3 ) тоже не получается, потому что компилятор ругается что мы не переопределили абстрактный метод. в итоге пришлось сделать приведение типов Код: ContractParamChangedEvent event2=(ContractParamChangedEvent)event1 Но насколько я помню теорию - так делать не сильно хорошо ![]() Или пофигу? Если нет, то как лучше сделать? |
Автор: | stark [ 25 июн 2012, 10:46 ] |
Заголовок сообщения: | Re: 5.2 Скрипт события |
Код: import ru.bitel.bgbilling.kernel.event.Event; import ru.bitel.bgbilling.kernel.script.server.dev.EventScriptBase; import ru.bitel.bgbilling.server.util.Setup; import ru.bitel.common.sql.ConnectionSet; import ru.bitel.bgbilling.kernel.event.events.ContractParamChangedEvent; import bitel.billing.server.contract.bean.*; public class login extends EventScriptBase<ContractParamChangedEvent> { @Override public void onEvent( ContractParamChangedEvent event1, Setup setup2, ConnectionSet connectionSet3 ) throws Exception { int cid = event1.getContractId(); int pid = event1.getParamId(); print(cid); print(pid); } } |
Автор: | stark [ 25 июн 2012, 10:46 ] |
Заголовок сообщения: | Re: 5.2 Скрипт события |
и называть класс с маленькой буквы не принято в java . Это запутывает. |
Автор: | dimOn [ 25 июн 2012, 11:04 ] |
Заголовок сообщения: | Re: 5.2 Скрипт события |
Приводить можно, а иногда и нужно. Но если есть возможность сразу класс типизировать, то так, конечно, будет правильнее и удобнее. Вот в биншеле, очевидно, выбора особо нет. |
Автор: | Феанор [ 25 июн 2012, 11:23 ] |
Заголовок сообщения: | Re: 5.2 Скрипт события |
stark писал(а): и называть класс с маленькой буквы не принято в java . Это запутывает. Ну да, странно что у человека на это компилятор не ругался. PS А если я захочу на два события один скрипт повесить? Экстендить то можно только 1 класс, это не интерфейс, которых несколько можно воплощать... |
Автор: | dimOn [ 25 июн 2012, 11:39 ] |
Заголовок сообщения: | Re: 5.2 Скрипт события |
Компилятор и не должен ругаться. Экстендить нужно один класс, он один и тот же. Как вы собираетесь на 2 события 1 скрипт вешать таким образом? |
Автор: | Феанор [ 25 июн 2012, 11:45 ] |
Заголовок сообщения: | Re: 5.2 Скрипт события |
dimOn писал(а): Компилятор и не должен ругаться. Экстендить нужно один класс, он один и тот же. Как вы собираетесь на 2 события 1 скрипт вешать таким образом? Я про типизацию Код: extends EventScriptBase<ContractParamChangedEvent> Комплиятор ругается. Но вроде только когда внутри Login.java идет public class login { } =) ps а если метод onEvent() перегрузить? Должно же будет заработать?:) Или какие-то свои минусы будут? Код: @Override
public void onEvent( Event event1, Setup setup2, ConnectionSet connectionSet3 ) throws Exception { //do nothing; } public void onEvent( ContractParamChangedEvent event1, Setup setup2, ConnectionSet connectionSet3 ) throws Exception { int cid = event1.getContractId(); int pid = event1.getParamId(); print(cid); print(pid); } |
Автор: | stark [ 25 июн 2012, 13:22 ] |
Заголовок сообщения: | Re: 5.2 Скрипт события |
Феанор писал(а): PS А если я захочу на два события один скрипт повесить? Экстендить то можно только 1 класс, это не интерфейс, которых несколько можно воплощать... Тогда делаете метод с Event и в нем код. Если нужно, то преобразовании типов делайте. И если код выполнятся по разному должен , то проверка Код: if ( event instanceof ContractParamChangedEvent )
{ } else if ( event instanceof BillCreatedEvent ) { } |
Автор: | Феанор [ 25 июн 2012, 14:52 ] |
Заголовок сообщения: | Re: 5.2 Скрипт события |
stark писал(а): Феанор писал(а): PS А если я захочу на два события один скрипт повесить? Экстендить то можно только 1 класс, это не интерфейс, которых несколько можно воплощать... Тогда делаете метод с Event и в нем код. Если нужно, то преобразовании типов делайте. И если код выполнятся по разному должен , то проверка Код: if ( event instanceof ContractParamChangedEvent ) { } else if ( event instanceof BillCreatedEvent ) { } ну я так и предполагал вобщем то.. Спасибо ) |
Автор: | Andrew [ 26 июн 2012, 05:28 ] |
Заголовок сообщения: | Re: 5.2 Скрипт события |
Мб такое в wiki занести? Наверно не я один на такие грабли попаду... |
Автор: | skyb [ 26 июн 2012, 07:31 ] |
Заголовок сообщения: | Re: 5.2 Скрипт события |
Andrew писал(а): Мб такое в wiki занести? Наверно не я один на такие грабли попаду... Так в чем проблема ![]() |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |