Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> почему в ява нет анотаций внутри методов? дилемные вопросы о архитектуре 
:(
    Опции темы
polosatij
  Дата 27.9.2008, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 1
Всего: 8



пишу JSF, и пришёл на мысль, что ...


сравните два блока

Код

            if (mSelectedNOF.equals(notamAddress.getNOF())
                    && ValueChecker.isNotNull(notamAddress.getAddress())) {
                mSeriesList.add(notamAddress.getSeries());
            }


Код

            @NotNull(notamAddress.getAddress())
            @Equals(mSelectedNOF, notamAddress.getNOF())
            mSeriesList.add(notamAddress.getSeries());


на мой взгляд, второй проще читать, чем первый. почему бы не ввести в ява анотации внутри метода?  smile 
можно конечно написать метод, что сделает это, но тогда теряется обзорность и легко заблудится.. smile


--------------------
PM   Вверх
powerOn
Дата 27.9.2008, 14:41 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 47
Всего: 159



Аннотации по своей философии не предназначены для описываемых вами целей. Даже сам механизм их обработки в принципе не соответствует таким задачам. Это не методы, они не выполнятся в рантайме. Это просто мета информация. Попробуйте представить, как и кем такие аннотации должны обрабатываться (и не будут ли они работать как методы).




--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
polosatij
Дата 27.9.2008, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 1
Всего: 8



Цитата(powerOn @  27.9.2008,  14:41 Найти цитируемый пост)
Это не методы, они не выполнятся в рантайме.

Цитата(powerOn @  27.9.2008,  14:41 Найти цитируемый пост)
Это просто мета информация. 


компилятор мог бы сделать if блок из данной серии анотаций  smile

Добавлено через 6 минут и 1 секунду
Цитата(powerOn @  27.9.2008,  14:41 Найти цитируемый пост)
Это не методы, они не выполнятся в рантайме.


как это не выполнятся? в рантайме можно читать анотации и делать что-нибудь соответствующим образом  smile 


--------------------
PM   Вверх
Samotnik
Дата 27.9.2008, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



polosatij,  а  не проще спросить у разработчиков  (мыло, форум, личка)???
При чем тут форумчане Винграда ?  Вроде никто с  САНовцами не знаком.  smile 
PM MAIL   Вверх
powerOn
Дата 27.9.2008, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 47
Всего: 159



Цитата(polosatij @  27.9.2008,  15:47 Найти цитируемый пост)
как это не выполнятся? в рантайме можно читать анотации и делать что-нибудь соответствующим образом

Операции производятся над ними, сами аннотации ничего не делают.

Цитата(polosatij @  27.9.2008,  15:47 Найти цитируемый пост)
компилятор мог бы сделать if блок из данной серии анотаций 

это мне напоминает макросы в С++.



--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
w1nd
Дата 27.9.2008, 16:50 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 20
Всего: 54



Цитата(polosatij @  27.9.2008,  13:58 Найти цитируемый пост)
на мой взгляд, второй проще читать, чем первый.

Проще? Что описано во втором примере - вообще непонятно.


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
dorogoyIV
Дата 28.9.2008, 06:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 3
Всего: 46



polosatij, вы хотите предложить свой язык программирования?
PM MAIL   Вверх
polosatij
Дата 28.9.2008, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 1
Всего: 8



Цитата(dorogoyIV @  28.9.2008,  06:09 Найти цитируемый пост)
polosatij, вы хотите предложить свой язык программирования? 


нет, их навалом уже.. хотелось бы сделать всё как можно проще..  smile

Добавлено через 8 минут и 19 секунд
Цитата(w1nd @  27.9.2008,  16:50 Найти цитируемый пост)
Проще? Что описано во втором примере - вообще непонятно. 


мысль проста.. сделать проще оператор if  smile 


--------------------
PM   Вверх
Старовъръ
Дата 28.9.2008, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.5.2008

Репутация: 4
Всего: 10



По-моему проще сделать для этого метод, если такая операция часто встречается. Аннотации на каждый случай жизни все равно делать же не будешь.
PM MAIL WWW   Вверх
alexadr
Дата 28.9.2008, 15:10 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 25.9.2006

Репутация: 4
Всего: 4



Цитата(polosatij @  27.9.2008,  13:58 Найти цитируемый пост)
сравните два блока

Код

            if (mSelectedNOF.equals(notamAddress.getNOF())
                    && ValueChecker.isNotNull(notamAddress.getAddress())) {
                mSeriesList.add(notamAddress.getSeries());
            }



Код

            @NotNull(notamAddress.getAddress())
            @Equals(mSelectedNOF, notamAddress.getNOF())
            mSeriesList.add(notamAddress.getSeries());




Для простого советского программиста 1-ый блок адназначна проще.

А вообще на эту тему есть неплохой пример в статьях(книгах) про антипатерны. 
Есть такой антипатерн, при котором разработчик обязательно хочет применить какой-то патерн там где он не нужен.
PM MAIL   Вверх
polosatij
Дата 28.9.2008, 23:10 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 1
Всего: 8



Цитата(Старовъръ @  28.9.2008,  14:50 Найти цитируемый пост)
По-моему проще сделать для этого метод, если такая операция часто встречается.


в if-е постоянно разные значения.. и нет смысла выделять всё в ещё один метод..


Цитата(alexadr @  28.9.2008,  15:10 Найти цитируемый пост)
Для простого советского программиста 1-ый блок адназначна проще.


значит, я не простой и не советский программист.. у меня уже рябит в глазах от постоянных if else


Цитата(alexadr @  28.9.2008,  15:10 Найти цитируемый пост)
Есть такой антипатерн, при котором разработчик обязательно хочет применить какой-то патерн там где он не нужен. 


я не вижу тут никакого антипаттерна, мне кажется что это проще.. не больше, не меньше.. 



--------------------
PM   Вверх
powerOn
Дата 29.9.2008, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 47
Всего: 159



Цитата(polosatij @  29.9.2008,  00:10 Найти цитируемый пост)
я не вижу тут никакого антипаттерна, мне кажется что это проще.. не больше, не меньше.. 


Цитата(ДМБ)

- Видишь суслика? 
- Нет. 
- И я не вижу. А он есть!


И напрасно вы его не видите. Лопата что бы копать, а топор что бы рубить. Не наоборот.






--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
LSD
Дата 29.9.2008, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Аннотации внутри методов - есть.
Код

import java.util.*;

public class Test
{
  public static void main(String[] args) throws Exception
  {
    System.out.println("Я делаю особую, аннотационную магию ;)");
    @SuppressWarnings("unchecked")
    List<String> list = new ArrayList();
    System.out.println("list = " + list);
  }
}



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
ivg
Дата 29.9.2008, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


Профиль
Группа: Участник
Сообщений: 686
Регистрация: 8.2.2006
Где: Екатеринбург

Репутация: 33
Всего: 81



Цитата(LSD @  29.9.2008,  16:12 Найти цитируемый пост)
Аннотации внутри методов - есть

А если точнее, то внутри метода аннотации могут быть объявлены только для локальных переменных. Автору топика "помогли бы" аннотации для участков кода. Но увы.
PM MAIL   Вверх
Samotnik
Дата 29.9.2008, 14:08 (ссылка)   | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



LSD,   smile  smile 
 smile   Молодец, пришел и все, что тут написанно выше перечеркнул   smile 

PM MAIL   Вверх
polosatij
Дата 29.9.2008, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 1
Всего: 8



LSD, 

это, конечно, хорошо, когда есть магия, однако эта магия никак не задела тему if.. что ты скажешь по этому поводу?

Цитата(powerOn @  29.9.2008,  00:07 Найти цитируемый пост)
И напрасно вы его не видите. Лопата что бы копать, а топор что бы рубить. Не наоборот.


руки для того, что бы писать.. извините, моя ваша не понимать, т.к. ваша говорить абстрактна..

Цитата(Старовъръ @  28.9.2008,  14:50 Найти цитируемый пост)
Аннотации на каждый случай жизни все равно делать же не будешь. 


всего-то навсего десяток случаев и всё..

Цитата(ivg @  29.9.2008,  13:54 Найти цитируемый пост)
Автору топика "помогли бы" аннотации для участков кода. Но увы. 


немного не понял, что ты хотел сказать.. увы, такого нет?


--------------------
PM   Вверх
LSD
Дата 30.9.2008, 12:12 (ссылка) |    (голосов:5) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(polosatij @  29.9.2008,  22:12 Найти цитируемый пост)
это, конечно, хорошо, когда есть магия, однако эта магия никак не задела тему if.. что ты скажешь по этому поводу?

Повторю предыдущего оратора: прекрати забивать дрелью гвозди, и закручивать шурупы молотком smile 

Есть механизм управления выполнением кода: это условные операторы, циклы и т.п. А есть механизм добавления мета информации к коду. И это два совершенно разных механизма, предназначенные для разных целей. И почему один должен выполнять функции другого - совершенно непонятно.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
polosatij
  Дата 30.9.2008, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 1
Всего: 8



Цитата(LSD @  30.9.2008,  12:12 Найти цитируемый пост)
Есть механизм управления выполнением кода: это условные операторы, циклы и т.п. А есть механизм добавления мета информации к коду. И это два совершенно разных механизма, предназначенные для разных целей. И почему один должен выполнять функции другого - совершенно непонятно. 


Код

    /** {@inheritDoc} */
    @Test
    @TestSpec(number = "3.1")
    @TestCaseID(value = TestCaseIDConstants.ADD_UPDATE_ASHTAM_POSITIVE)
    @TestResult(state = EReplyListenerState.ON_POSITIVE_RESPONSE)
    public void testPositiveResponse() {
        execute(mRequest.getPositiveRequest());
    }


судя по вашей логике, мне не надо было писать анотации, а нужно было оставить "страшные" и тупо повторяющиеся конкструкции с if-ами или самому писать reflection.. таким образом я описал около 500 тестов за пару недель..

а чем не устраивает такой вариант? вся логика вынесена в setUp и tearDown, анотации помогают мыставить мета данные на запуск и на окончание данной методы.. так что же мешает или что плохого сделать такое на часть кода внутри методы вместо тупо "повторяющихся" if-ов?   smile 


--------------------
PM   Вверх
w1nd
Дата 30.9.2008, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 20
Всего: 54



Цитата(polosatij @  30.9.2008,  17:58 Найти цитируемый пост)
судя по вашей логике, мне не надо было писать анотации, а нужно было оставить "страшные" и тупо повторяющиеся конкструкции с if-ами или самому писать reflection.. таким образом я описал около 500 тестов за пару недель..

Позвольте полюбопытствовать - где в вашем примере закодирован if?


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
polosatij
Дата 30.9.2008, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 1
Всего: 8



Цитата(w1nd @  30.9.2008,  18:03 Найти цитируемый пост)
Позвольте полюбопытствовать - где в вашем примере закодирован if? 


Цитата(polosatij @  30.9.2008,  17:58 Найти цитируемый пост)
execute(mRequest.getPositiveRequest());


if successful
else unsuccessful

@TestResult ожидает именно такого результата в стеке от этой методы..  smile 


--------------------
PM   Вверх
w1nd
Дата 30.9.2008, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 20
Всего: 54



Цитата(polosatij @  30.9.2008,  18:08 Найти цитируемый пост)
if successfulelse unsuccessful

Не вижу что-то. Конструкция if закодирована в tearDown(). Аннотация TestResult - не более, чем статичная метаинформация и ничего нигде не ожидает smile  


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
polosatij
Дата 30.9.2008, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 1
Всего: 8



Цитата(w1nd @  30.9.2008,  18:15 Найти цитируемый пост)
Аннотация TestResult 


анотация TestResult, как и другая анотация ничего и ожидать не будет.. всё зависит от value стоящей в ней.. это такая же метаинформация, как и в моём первом примере в этом топике..  smile 



--------------------
PM   Вверх
LSD
Дата 30.9.2008, 18:28 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(polosatij @  30.9.2008,  19:19 Найти цитируемый пост)
анотация TestResult, как и другая анотация ничего и ожидать не будет.. всё зависит от value стоящей в ней.. это такая же метаинформация, как и в моём первом примере в этом топике..

А мета информацию кто обрабатывает? smile Не Демон-Гослинга же smile

Просто в данном случае часть кода вынесена в другое место и использует мета информацию в своей работе. Сама аннотация по прежнему ничего не делает.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Дрон
Дата 30.9.2008, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 6
Всего: 93



Тут налицо явное непонимание smile

Цитата(polosatij @  30.9.2008,  18:58 Найти цитируемый пост)
судя по вашей логике, мне не надо было писать анотации, а нужно было оставить "страшные" и тупо повторяющиеся конкструкции с if-ами или самому писать reflection.. таким образом я описал около 500 тестов за пару недель..

А как выполняются эти тесты? Через reflection загружается список методов с их аннотациями, потом в зависимости от метаданных из аннотаций эти методы специальным образом вызываются. Аннотации то всё равно относятся не к коду метода, а к методу целиком. 

Как правильно сказал LSD, если ты поставишь аннотацию в произвольном месте, то кто её в этом случае должен обрабатывать? Аннотации -- они не исполняются сами по себе, они только интерпретируются каким-то отдельным обработчиком.

Мощность компьютеров (и лень программистов) видимо ещё не дошла до того, чтобы делать вызов произвольного метода некоей отдельной сущностью, к которой можно цеплять и обрабатывать аннотации.


--------------------
Да. Именно так.
PM   Вверх
polosatij
  Дата 30.9.2008, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 1
Всего: 8



Цитата(Дрон @  30.9.2008,  18:51 Найти цитируемый пост)
Аннотации то всё равно относятся не к коду метода, а к методу целиком. 


вот это вот жалко.. не было времени эксперементировать..  smile 

Цитата(Дрон @  30.9.2008,  18:51 Найти цитируемый пост)
Мощность компьютеров (и лень программистов) видимо ещё не дошла до того, чтобы делать вызов произвольного метода некоей отдельной сущностью, к которой можно цеплять и обрабатывать аннотации. 


ех.. smile



--------------------
PM   Вверх
Hroft
Дата 1.10.2008, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 20.10.2003
Где: Москва

Репутация: 1
Всего: 3



Весь топик выглядит каким-то фарсом, если честно.
В чем заключается проблема, о которой столько понаписали? Хочется альтернативной записи большого количества условий, может быть? Можно закодировать условия в хэши по сравниваемым значениям или даже вычисляемым условиям, хранящие в значениях либо непосредственно инструкции к исполнению, либо вложенные деревья условий, обрабатываемые специальным методом. Те же самые аннотации-метаинформация получается, только без введения каких-то новинок в стандарт.
Цитата(Дрон @  30.9.2008,  18:51 Найти цитируемый пост)
Мощность компьютеров (и лень программистов) видимо ещё не дошла до того, чтобы делать вызов произвольного метода некоей отдельной сущностью, к которой можно цеплять и обрабатывать аннотации. 

Это не паттерн Command случаем?
PM MAIL ICQ   Вверх
Дрон
Дата 1.10.2008, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 6
Всего: 93



Цитата(Hroft @  1.10.2008,  16:03 Найти цитируемый пост)
Это не паттерн Command случаем? 

Ну, в некотором роде -- да, только у меня ключевое слово "любого метода" smile
И, кстати, спасибо -- ты упоминанием паттерна подкинул мне идею, как обяъснить всю нелепость вопроса этой темы.
Вот исходный пример:
Код
            
@NotNull(notamAddress.getAddress())
@Equals(mSelectedNOF, notamAddress.getNOF())
mSeriesList.add(notamAddress.getSeries());

Если автор уж очень хочет делать аннотации к вызовам методов, то в нынешнем синтаксисе Java это выглядело бы как-то так:
Код

class ConditionalInvoker
{
    public static void invoke(Runnable command)
    {
            if (/* вот тут через reflection получаем нужные аннотации и проверяем условие */)
            {
                   command.run();
            }
    }
}

static void main(String[] args)
{
   ...
   ConditionalInvoker.invoke(new Runnable()
   {
        @NotNull(notamAddress.getAddress())
        @Equals(mSelectedNOF, notamAddress.getNOF())
        public void run()
        {
              mSeriesList.add(notamAddress.getSeries());                
        }
   });
}

Тем самым вызов любого метода получается обёрнут в некий контейнер, к которому можно прицепить аннотации и выполняется этот метод не напрямую, а через соответствующий обработчик. Ужас. Это ж жуть какие накладные расходы.

PS: Я не уверен, что в аннотациях можно использовать такие конструкции (вычисляемые во время выполнения). Мне не приходилось с ними плотно работать и есть подозрение, что там можно использовать только константы. Так что может эту задачу вообще нереально решить аннотациями smile

Это сообщение отредактировал(а) Дрон - 1.10.2008, 15:53


--------------------
Да. Именно так.
PM   Вверх
polosatij
Дата 1.10.2008, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 1
Всего: 8




Дрон, вот ты намутил  smile

мой вопрос был не написать wrapper, это бы я и сам смог.. мой вопрос был, почему "нет" анотаций вместо непрекращающихся if-ов  smile 


--------------------
PM   Вверх
fixxer
Дата 2.10.2008, 07:03 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 14.9.2006
Где: Саратов, Россия

Репутация: 6
Всего: 27



Цитата(polosatij @ 1.10.2008,  17:53)
Дрон, вот ты намутил  smile

мой вопрос был не написать wrapper, это бы я и сам смог.. мой вопрос был, почему "нет" анотаций вместо непрекращающихся if-ов  smile

А кто анотации бы обработал?

Я вообще не понимаю о чем спор. Нету такого и хорошо что нет и врятли когда-нибудь будет. А все остальное - это "Вот как бы нос Иван Иваныча да к лицу Иван Никифорыча" (с) Гоголь


--------------------
user posted image
PM MAIL ICQ   Вверх
Дрон
Дата 2.10.2008, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 6
Всего: 93



Цитата(polosatij @  1.10.2008,  18:53 Найти цитируемый пост)
мой вопрос был не написать wrapper, это бы я и сам смог.. мой вопрос был, почему "нет" анотаций вместо непрекращающихся if-ов  smile  

Ты меня совсем не понял. Мой ответ был не о том, как написать обёртку, а о том, что для реализации того, что ты хочешь, каждый вызов любого метода должен быть завёрнут в подобную обёртку (пусть даже и неявно).

Цитата(fixxer @  2.10.2008,  08:03 Найти цитируемый пост)
Я вообще не понимаю о чем спор.

Угу. На этом объяснения заканчиваю, ибо до цели они не доходят  smile 

Это сообщение отредактировал(а) Дрон - 2.10.2008, 10:48


--------------------
Да. Именно так.
PM   Вверх
polosatij
Дата 2.10.2008, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 1
Всего: 8



Цитата(Дрон @  2.10.2008,  10:46 Найти цитируемый пост)
Ты меня совсем не понял. Мой ответ был не о том, как написать обёртку, а о том, что для реализации того, что ты хочешь, каждый вызов любого метода должен быть завёрнут в подобную обёртку (пусть даже и неявно).



нет.. это ты меня не понял.. в ява есть анотация @SuppresWarnings, что говорит о том: не надо бросать warning  в этом блоке => мне итак понятно, что тип соответствует действительности..

я говорю о annotation для компилятора, а не про annotation "вызываемых" по время runtime..  smile 


--------------------
PM   Вверх
LSD
Дата 2.10.2008, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(polosatij @  2.10.2008,  12:45 Найти цитируемый пост)
я говорю о annotation для компилятора, а не про annotation "вызываемых" по время runtime..

Ну тогда, то о чем ты говоришь просто синтаксический сахар. Писать if лень и ненаглядно, а писать аннотации - не лень и наглядно.

Если уж так охота, то попробуй написать НБНФ нотацию для таких аннотаций, и посмотри не будет ли там противоречий.

P.S. Аннотации в их текущей реализации никак для этого не подходят, т.к. там в качестве аргументов могут быть только константы.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
polosatij
Дата 2.10.2008, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 1
Всего: 8



Цитата(LSD @  2.10.2008,  11:57 Найти цитируемый пост)
НБНФ нотацию


я не совсем понял, что это значит.. можно по подробнее?  smile 

продолжая тему о анотациях! smile 


бывают ситуации:

abstract object A
abstract doSomething();

object A1 extends A
object A2 extends A

в такой ситуации A1 и А2 обязаны имплементировать методу doSomething();
иногда есть случаи, когда A2 не должна иметь методу doSomething(); в этих случаях бросают Exception, как было бы не плохо не бросать Exception, что будет throw в Runtime, а написать анотацию, что данный метод не может быть вызван и это будет известно на этапе компиляции  smile 




--------------------
PM   Вверх
polosatij
Дата 2.10.2008, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 1
Всего: 8





(3) продолжая тему о синтаксическом сахаре..

бывает так, что в одном классе используются два класса одинакового имени.. приходится использовать путь к классу полностью.. было бы не плохо, вынести это просто в анотацию  smile 


--------------------
PM   Вверх
LSD
Дата 2.10.2008, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(polosatij @  2.10.2008,  14:41 Найти цитируемый пост)
я не совсем понял, что это значит.. можно по подробнее?

Нормальная Форма Бэкуса-Наура (иногда её сокращают до БНФ)


Цитата(polosatij @  2.10.2008,  14:41 Найти цитируемый пост)
бывают ситуации:

abstract object A
abstract doSomething();

object A1 extends A
object A2 extends A

в такой ситуации A1 и А2 обязаны имплементировать методу doSomething();
иногда есть случаи, когда A2 не должна иметь методу doSomething(); в этих случаях бросают Exception, как было бы не плохо не бросать Exception, что будет throw в Runtime, а написать анотацию, что данный метод не может быть вызван и это будет известно на этапе компиляции

Мы кладем в коллекцию объекты базового класса и компилятор не знает, когда нам попадется такой "замечательный" объект, который не имплементировал этот метод. А самое главное и разработчик тоже может об этом ничего не знать.
Не хочешь имплементировать метод сделай класс абстрактным, иначе это грубейшее нарушение контракта.

Добавлено через 3 минуты и 42 секунды
Цитата(polosatij @  2.10.2008,  15:30 Найти цитируемый пост)
бывает так, что в одном классе используются два класса одинакового имени.. приходится использовать путь к классу полностью.. было бы не плохо, вынести это просто в анотацию 

Ну и чем код:
Код

@ClassName("java.util.Date")
private Date date;

лучше чем:
Код

private java.util.Date date;

?

Писанины даже больше. И вот такой код:
Код

@ClassName("java.util.Date")
private Date date = new Date();

порождает вопрос: какой класс должен использоваться для new Date()?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
polosatij
Дата 2.10.2008, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 1
Всего: 8



Цитата(LSD @  2.10.2008,  14:34 Найти цитируемый пост)
Мы кладем в коллекцию объекты базового класса и компилятор не знает, когда нам попадется такой "замечательный" объект, который не имплементировал этот метод. А самое главное и разработчик тоже может об этом ничего не знать.


да.. компилятор в этом случае не знает эту ситуацию, на что он просто встраивает методу сам, которая бросает нужный Exception при обращении к нему, это первое.. однако при прямом обращении, компилятор бы знал ситуацию и говорил сразу об этом..

Цитата(LSD @  2.10.2008,  14:34 Найти цитируемый пост)
Не хочешь имплементировать метод сделай класс абстрактным, иначе это грубейшее нарушение контракта.


это я вообще не понял к чему сказано для этой темы..

Цитата(LSD @  2.10.2008,  14:34 Найти цитируемый пост)
@ClassName("java.util.Date")
private Date date;


1). не "java.util.Date", а просто java.util.Date
2). а такая конструкция тоже хороша?!

Код

    de.xxx_firma.xxx_produkt.common.types.ESI.jibx.INO.errors.Errors.Error error =
        new de.xxx_firma.xxx_produkt.common.types.ESI.jibx.INO.errors.Errors.Error();
   de.xxx_firma.xxx_produkt.common.types.ESI.jibx.INO.errors.Errors.Warning warning = 
       new de.xxx_firma.xxx_produkt.common.types.ESI.jibx.INO.errors.Errors.Warning();

   // ...

   final ArrayList < de.xxx_firma.xxx_produkt.common.types.ESI.jibx.INO.errors.Errors.Error > list = new 
       new ArrayList < de.xxx_firma.xxx_produkt.common.types.ESI.jibx.INO.errors.Errors.Error > ();



Цитата(LSD @  2.10.2008,  14:34 Найти цитируемый пост)
порождает вопрос: какой класс должен использоваться для new Date()? 


если бы ява привязывала анотации внутри метода к вызовам, эта трабла бы легко решалась.. => см. название темы


--------------------
PM   Вверх
LSD
Дата 2.10.2008, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(polosatij @  2.10.2008,  16:39 Найти цитируемый пост)
да.. компилятор в этом случае не знает эту ситуацию, на что он просто встраивает методу сам, которая бросает нужный Exception при обращении к нему

... и к которому (Exception-ну) никто не готов smile 
Ты знаешь какой Exception выкидывается когда нужный метод в классе отсутствует? И почему именно такой?


Цитата(polosatij @  2.10.2008,  16:39 Найти цитируемый пост)
это я вообще не понял к чему сказано для этой темы..

Ты знаешь что такое контракт функции? Или тебя интересует почему выбрасывание недекларированного Exception-а нарушает контракт?


Цитата(polosatij @  2.10.2008,  16:39 Найти цитируемый пост)
1). не "java.util.Date", а просто java.util.Date
2). а такая конструкция тоже хороша?!

1. можно и так, не суть важно
2. Ну так это ИМХО уже проблемы разработчика, что он не может в одном проекте придумать не пересекающиеся имена для классов

Цитата(polosatij @  2.10.2008,  16:39 Найти цитируемый пост)
если бы ява привязывала анотации внутри метода к вызовам, эта трабла бы легко решалась.. => см. название темы 

Ты не понял, в моем примере для компилятора есть как минимум 3 возможности:
- создать объект типа java.util.Date
- создать объект типа java.sql.Date (он приводим к java.util.Date)
- создать объект типа Date (наш самопальный класс определённый в дефолтовом пакадже)
И вовсе не очевидно, что он должен выбрать.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
polosatij
Дата 2.10.2008, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 1
Всего: 8



Цитата(LSD @  2.10.2008,  15:50 Найти цитируемый пост)

... и к которому (Exception-ну) никто не готов smile 
Ты знаешь какой Exception выкидывается когда нужный метод в классе отсутствует? И почему именно такой?


всё равно тебе придётся в методу встроить throw "new RuntimeException()";
если проект большой, то занимаешься простой ерундой с copy & paste, причём никто тебе не гарантирует, что ты при больших объёмах, запаришься и просмотришь что-нибудь..

Цитата(LSD @  2.10.2008,  15:50 Найти цитируемый пост)
1. можно и так, не суть важно


нужнА  smile 

Цитата(LSD @  2.10.2008,  15:50 Найти цитируемый пост)
недекларированного Exception-а


=> RuntimeException() + декларирование анотации в допустимом классе

Цитата(LSD @  2.10.2008,  15:50 Найти цитируемый пост)
2. Ну так это ИМХО уже проблемы разработчика, что он не может в одном проекте придумать не пересекающиеся имена для классов


я тебя понимаю, но это не всегда решается. у меня эта травла в проекте не решается..

если получается Date extends Date => принимая во внимание, что у нас annotation  smile а значит добавляем параметер и дело решено  smile 



--------------------
PM   Вверх
fixxer
Дата 2.10.2008, 16:05 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 14.9.2006
Где: Саратов, Россия

Репутация: 6
Всего: 27



Цитата(polosatij @ 2.10.2008,  15:39)
Код

    de.xxx_firma.xxx_produkt.common.types.ESI.jibx.INO.errors.Errors.Error error =
        new de.xxx_firma.xxx_produkt.common.types.ESI.jibx.INO.errors.Errors.Error();
   de.xxx_firma.xxx_produkt.common.types.ESI.jibx.INO.errors.Errors.Warning warning = 
       new de.xxx_firma.xxx_produkt.common.types.ESI.jibx.INO.errors.Errors.Warning();

   // ...

   final ArrayList < de.xxx_firma.xxx_produkt.common.types.ESI.jibx.INO.errors.Errors.Error > list = new 
       new ArrayList < de.xxx_firma.xxx_produkt.common.types.ESI.jibx.INO.errors.Errors.Error > ();

За такое нужно вешать. За йайца.


--------------------
user posted image
PM MAIL ICQ   Вверх
polosatij
  Дата 2.10.2008, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 1
Всего: 8



Цитата(fixxer @  2.10.2008,  16:05 Найти цитируемый пост)
За такое нужно вешать. За йайца. 


ты предлогай варианты  smile 

скажи мне, пожалуйста, как ты собираешься решать возникшую траблу, если Error и Warning пришли с чужим lib??

и кстати, тема про ... с накопившимися собственными и прочими библиотеками, конфликты будут только возникать и возникать в будущем.


--------------------
PM   Вверх
fixxer
Дата 2.10.2008, 16:36 (ссылка) |  (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 14.9.2006
Где: Саратов, Россия

Репутация: 6
Всего: 27



Цитата(polosatij @ 2.10.2008,  16:18)
Цитата(fixxer @  2.10.2008,  16:05 Найти цитируемый пост)
За такое нужно вешать. За йайца. 


ты предлогай варианты  smile 

скажи мне, пожалуйста, как ты собираешься решать возникшую траблу, если Error и Warning пришли с чужим lib??

1. Импортнуть. А полностью квалифицировать то, что покороче. smile
2. Не использовать дебильные либы.

ЗЫ. А вообще лучше решать реальные задачи, а не высасывать непонятно что из пальца.

Это сообщение отредактировал(а) fixxer - 2.10.2008, 16:38


--------------------
user posted image
PM MAIL ICQ   Вверх
polosatij
Дата 2.10.2008, 16:43 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 1
Всего: 8



Цитата(fixxer @  2.10.2008,  16:36 Найти цитируемый пост)
1. Импортнуть. А полностью квалифицировать то, что покороче. 


ты читал предыдущие темы? не в обиду будет сказано, топай на вверх и прочитай всё.. 
как ты собираешься импортнуть классы с одинаковым именем?

Цитата(fixxer @  2.10.2008,  16:36 Найти цитируемый пост)
2. Не использовать дебильные либы.


 smile вот это ты сказанул.. ЩАЗ я по твоей подсказке, выкину из проекта пару либов.. ты не врубаешься о чём речь идёт  smile   smile 

Цитата(fixxer @  2.10.2008,  16:36 Найти цитируемый пост)
ЗЫ. А вообще лучше решать реальные задачи, а не высасывать непонятно что из пальца.


smile, опять же, наверх и прочитать всё.. smile



--------------------
PM   Вверх
fixxer
Дата 2.10.2008, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 14.9.2006
Где: Саратов, Россия

Репутация: 6
Всего: 27



Цитата(polosatij @ 2.10.2008,  16:43)
Цитата(fixxer @  2.10.2008,  16:36 Найти цитируемый пост)
1. Импортнуть. А полностью квалифицировать то, что покороче. 


ты читал предыдущие темы? не в обиду будет сказано, топай на вверх и прочитай всё.. 
как ты собираешься импортнуть классы с одинаковым именем?

Не догоняешь? Один из них импортнуть, тот у которого пакет длиннее или тот, который чаще используется в коде класса.

Это сообщение отредактировал(а) fixxer - 2.10.2008, 16:52


--------------------
user posted image
PM MAIL ICQ   Вверх
polosatij
Дата 2.10.2008, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 1
Всего: 8



Цитата(fixxer @  2.10.2008,  16:50 Найти цитируемый пост)
Не догоняешь? Один из них импортнуть, тот у которого пакет длиннее или тот, который чаще используется в коде класса.


это ты из каких соображений собираешься сделать?

1). path для того и другого почти одинаковый и длинный
2). они оба используются очень часто

 smile и читай название темы. ты увёл всю тему в сторону от нашего разговора.



--------------------
PM   Вверх
fixxer
Дата 2.10.2008, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 14.9.2006
Где: Саратов, Россия

Репутация: 6
Всего: 27



Цитата(polosatij @ 2.10.2008,  17:05)
Цитата(fixxer @  2.10.2008,  16:50 Найти цитируемый пост)
Не догоняешь? Один из них импортнуть, тот у которого пакет длиннее или тот, который чаще используется в коде класса.


это ты из каких соображений собираешься сделать?

1). path для того и другого почти одинаковый и длинный
2). они оба используются очень часто

 smile и читай название темы. ты увёл всю тему в сторону от нашего разговора.

Реальный пример приведи.

Такой случай очень редок. Чтобы и вложенность пакетов одинаково длинная, и чтобы использовались одинаково часто в коде класса, и чтобы оба из сторонних библиотек. Но уж если случилась такая беда можно и пожертвовать ООП в угоду читабельности, а именно обернуть в свой класс, чтобы не было прямых упоминаний в коде имени того страшного класса, а все вызовы через геттер myWrapper.getThatDamnClassObject().theMethod(). Это изврат, да, но что ж поделаешь если такая оказия приключилась?

Тему ты сам поднял, когда сказал что неплохо было бы иметь такую аннотацию. Тем не менее она бы не спасла если классы используются в пределах одной конструкции.

Это сообщение отредактировал(а) fixxer - 2.10.2008, 17:26


--------------------
user posted image
PM MAIL ICQ   Вверх
polosatij
Дата 2.10.2008, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 1
Всего: 8



Цитата(fixxer @  2.10.2008,  17:25 Найти цитируемый пост)
Такой случай очень редок. 


согласен  smile  посему я и сказал, что было бы не плохо, если бы.. и название темы: "почему в ява так мало решено анотациями".. а  это, лишь как пример возможной ситуации  smile 



--------------------
PM   Вверх
fixxer
Дата 2.10.2008, 17:59 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 14.9.2006
Где: Саратов, Россия

Репутация: 6
Всего: 27



Чтобы, так сказать, расставить точки над Ё. Мое мнение такое:

Зачастую бывает так, что вместо того чтобы действительно решать проблему, люди придумывают различные workaround'ы, порой фантастические. Типа: "Вот неплохо было бы иметь такую конструкцию, она сразу бы решила мою локальную проблему", - вместо того чтобы искоренить первопричину. Обратимся к началу топика. Проблема, как я понял, в том, что часто приходится писать ветвления со сложным условием, порой с одинаковыми конструкциями в условиях в различном их сочетании. А это, к гадалке не ходи, как правило означает проблемы в проектировании. Например перегруженный функционалом класс или наоборот размазанный по иерархии функционал. Как правило такие проблемы можно решить перепроектированием классов и их взаимодействия. Локализовать ответственности, разбить на более мелкие, но умные классы или применить, к примеру, State/Strategy, ну или сгруппировать и обернуть условия в более явные и предметные предикаты.

Я ни в коем случае не говорю, что у тебя именно так, я твою задачу не знаю, твоего кода не видел. Просто предположение.

В любом случае разговоры типа "А не плохо если бы..." беспредметны.


--------------------
user posted image
PM MAIL ICQ   Вверх
Aristotelb
Дата 2.10.2008, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 23.3.2007
Где: Саратов

Репутация: 4
Всего: 5



Цитата(fixxer @  2.10.2008,  16:36 Найти цитируемый пост)
1. Импортнуть. А полностью квалифицировать то, что покороче. 2. Не использовать дебильные либы.


Или изобрести наконец алиасы, почему их до сих пор нет в Java мне не понятно

Добавлено через 12 минут и 5 секунд
Цитата(fixxer @  2.10.2008,  17:59 Найти цитируемый пост)
Зачастую бывает так, что вместо того чтобы действительно решать проблему, люди придумывают различные workaround'ы, порой фантастические. Типа: "Вот неплохо было бы иметь такую конструкцию, она сразу бы решила мою локальную проблему", - вместо того чтобы искоренить первопричину. Обратимся к началу топика. Проблема, как я понял, в том, что часто приходится писать ветвления со сложным условием, порой с одинаковыми конструкциями в условиях в различном их сочетании. А это, к гадалке не ходи, как правило означает проблемы в проектировании. Например перегруженный функционалом класс или наоборот размазанный по иерархии функционал. Как правило такие проблемы можно решить перепроектированием классов и их взаимодействия. Локализовать ответственности, разбить на более мелкие, но умные классы или применить, к примеру, State/Strategy, ну или сгруппировать и обернуть условия в более явные и предметные предикаты.


На сколько я понял человек просто ищет пути (может не совсем верные | совсем не верные) к автоматизации рутинной работы, а она рано или поздно возникнет даже при идеальной архитектуре
PM MAIL ICQ   Вверх
polosatij
Дата 2.10.2008, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 1
Всего: 8





Цитата(fixxer @  2.10.2008,  17:59 Найти цитируемый пост)
Зачастую бывает так, что вместо того чтобы действительно решать проблему, люди придумывают различные workaround'ы, порой фантастические. 


зачастую бывает такое, что одни занимаются практикой, другие теорией..  а также некоторые практики иногда хотят теории.. и наоборот.. может ты в этот строчке хоть увидишь смысл..


Цитата(Aristotelb @  2.10.2008,  19:48 Найти цитируемый пост)
На сколько я понял человек просто ищет пути (может не совсем верные | совсем не верные) к автоматизации рутинной работы, а она рано или поздно возникнет даже при идеальной архитектуре 


угу.. ты попап в самую точку  smile 



Цитата(Aristotelb @  2.10.2008,  19:48 Найти цитируемый пост)
Или изобрести наконец алиасы, почему их до сих пор нет в Java мне не понятно


что такое алиас и с чем его едят?  smile // посмотрел в гоогле, пока не очень понял зачем это и зачем это для ява..


--------------------
PM   Вверх
v2v
Дата 2.10.2008, 22:57 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 8
Всего: 56



Цитата(polosatij @  2.10.2008,  22:20 Найти цитируемый пост)
polosatij  
что такое алиас и с чем его едят?  smile // пос


на примере
Код


{
     doAction1(com.net.play.game.package.name.subname.subSubname.SuperLongSuperClassName.getParam1());
     doAction2(com.net.play.game.package.name.subname.subSubname.SuperLongSuperClassName.getParam2());
     doAction3(com.net.play.game.package.name.subname.subSubname.SuperLongSuperClassName.getParam3());
     doAction4(net.game.packagename2.subname.subSubname.SuperLongSuperClassName.getOtherParam());
}

// ( псевдокод ) c алиасами:

  define   com.net.play.game.package.name.subname.subSubname.SuperLongSuperClassName SLSCL;
  define   net.game.packagename2.subname.subSubname.SuperLongSuperClassName nSLSCL;
{
     doAction1(SLSCL.getParam1());
     doAction2(SLSCL.getParam2());
     doAction3(SLSCL.getParam3());
     doAction4(nSLSCL.getOtherParam());

}



теперь по сабжу.
Если не ошибаюсь, Стандарт JSR-308 , который будет входить в 7ю яву , описывает как использовать аннотации вместе с типами (переменными).
например можно будет объявлять 
@NotNull
Integer a;
Но кроме этого будет возможность создавать свои аннотации с изощерённой логикой ... проверками, условиями и т.д...



Это сообщение отредактировал(а) v2v - 2.10.2008, 23:15


--------------------
PM   Вверх
fixxer
Дата 3.10.2008, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 14.9.2006
Где: Саратов, Россия

Репутация: 6
Всего: 27



Цитата(v2v @ 2.10.2008,  22:57)

теперь по сабжу.
Если не ошибаюсь, Стандарт JSR-308 , который будет входить в 7ю яву , описывает как использовать аннотации вместе с типами (переменными).
например можно будет объявлять 
@NotNull
Integer a;
Но кроме этого будет возможность создавать свои аннотации с изощерённой логикой ... проверками, условиями и т.д...

Че-то я  очкую (с)

http://www.michaelnygard.com/blog/2008/05/..._jsr_308_t.html
http://dmlloyd.blogspot.com/2008/05/closer...at-jsr-308.html
http://bc-squared.blogspot.com/2008/05/wha...va-wrought.html


--------------------
user posted image
PM MAIL ICQ   Вверх
COVD
Дата 3.10.2008, 04:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



Цитата

человек просто ищет пути ... к автоматизации рутинной работы


если в работе намечается рутина, может просто пора ... поменять работу? smile 
PM MAIL   Вверх
Дрон
Дата 3.10.2008, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 6
Всего: 93



Цитата(v2v @  2.10.2008,  23:57 Найти цитируемый пост)
Стандарт JSR-308 , который будет входить в 7ю яву

Код
@NotEmpty List<@NonNull String> strings = new ArrayList<@NonNull String>();

От блин, но автор вот тут правильно заметил, что это уже чересчур. Вообще как я где-то читал и полностью согласен -- на самом деле исходный код чаще читается людбми, чем пишется. Я бы не хотел в такой галиматье разбираться. Это напоминает мне жуткие и абсолютно нечитаемые конструкции с шаблонами к которым в итоге пришёл С++.

Это сообщение отредактировал(а) Дрон - 3.10.2008, 09:33


--------------------
Да. Именно так.
PM   Вверх
ecologist
Дата 3.10.2008, 09:32 (ссылка) |   (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 452
Регистрация: 28.2.2007

Репутация: 2
Всего: 9



Цитата(v2v @  2.10.2008,  22:57 Найти цитируемый пост)
например можно будет объявлять 
@NotNull
Integer a;
Но кроме этого будет возможность создавать свои аннотации с изощерённой логикой ... проверками, условиями и т.д...

Ну и что здесь такого, что занимается логикой работы программы ? Ну да - есть ОПИСАНИЕ того, как надо инициализировать переменную. И что ? Это заменяет if ? 

Я подозреваю, что меня тут сразу забанять за наезд, но по-моему Вы занимаетесь самолюбованием - ах, посмотрите, какую штуку я тут придумал. Про таких Мичурин говорил, что "они готовы скрестить что угодно с чем угодно и получить совершенно непонятный результат" (не гарантирую за точность высказывания - давно встречал).

Надо строить то, что реально может быть востребовано и может помочь в работе. А то, что предложено в начале топика - полный идиотизм.
PM MAIL   Вверх
Hroft
Дата 3.10.2008, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 20.10.2003
Где: Москва

Репутация: 1
Всего: 3



Цитата(Дрон @  3.10.2008,  09:32 Найти цитируемый пост)
жуткие и абсолютно нечитаемые конструкции с шаблонами к которым в итоге пришёл С++.

Вот! Прямо в точку.
PM MAIL ICQ   Вверх
w1nd
Дата 3.10.2008, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 20
Всего: 54



Кстати, у меня идея появилась по поводу всех этих @NotNull. На самом деле тут уже совсем другая штука получается, вовсе не "умные самоисполняющиеся аннотации", да и всё необходимое уже есть. Например, можно было бы реализовать нормальную поддержку константных объектов:

Код
    public static class MyClass {
        
        @Constant public void doSomethingWithoutStateChange() {
        }
        
        public void changeState() {
        }
        
    }

    public void test(@Constant MyClass my) {
        my.doSomethingWithoutStateChange(); // Тут всё хорошо
        my.changeState(); // Тут ошибка компиляции
    }


Нужно всего-то сделать процессор для apt, после чего заполучить полные штаны счастья smile Точно так же уже сейчас можно сделать и пресловутый @NotNull.

Это сообщение отредактировал(а) w1nd - 3.10.2008, 11:28


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
fixxer
Дата 3.10.2008, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 14.9.2006
Где: Саратов, Россия

Репутация: 6
Всего: 27



Проще Scala канонизировать


--------------------
user posted image
PM MAIL ICQ   Вверх
w1nd
Дата 3.10.2008, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 20
Всего: 54



Цитата(fixxer @  3.10.2008,  11:33 Найти цитируемый пост)
Проще Scala канонизировать

Тьфу... Есть же любители всё опошлить smile 

Это сообщение отредактировал(а) w1nd - 3.10.2008, 11:41


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
fixxer
Дата 3.10.2008, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 14.9.2006
Где: Саратов, Россия

Репутация: 6
Всего: 27



Цитата(w1nd @ 3.10.2008,  11:40)
Цитата(fixxer @  3.10.2008,  11:33 Найти цитируемый пост)
Проще Scala канонизировать

Тьфу... Есть же любители всё опошлить smile

Да пользы было бы больше. Ты почитай ссылки на блоги, что я давал.
Я не хочу такого мусора из аннотаций в Java. За ними кода не видно.


--------------------
user posted image
PM MAIL ICQ   Вверх
w1nd
Дата 3.10.2008, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 20
Всего: 54



Цитата(fixxer @  3.10.2008,  11:46 Найти цитируемый пост)
Да пользы было бы больше.

Насчёт пользы я сильно-сильно не уверен. Ни scala, ни ruby, ни любые другие надстройки, думаю, никогда не приживутся. 

Цитата(fixxer @  3.10.2008,  11:46 Найти цитируемый пост)
Я не хочу такого мусора из аннотаций в Java. За ними кода не видно.

Во-первых, этот "мусор" уже есть, метаться поздно. Во-вторых, чем вам не угодило вдруг использование аннотаций по прямому их назначению?

Это сообщение отредактировал(а) w1nd - 3.10.2008, 11:53


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
v2v
Дата 3.10.2008, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 8
Всего: 56



2all agains annotations, 
не знаю не знаю ... в JPA ведь уже давно реализованы такие аннотации и они пользуются большой популярностью из-за своего удобства.

Цитата(Дрон @  3.10.2008,  09:32 Найти цитируемый пост)

@NotEmpty List<@NonNull String> strings = new ArrayList<@NonNull String>();

так ведь вам и без аннотаций никто не мешает написать код , где чёрт ногу сломит ... всему есть своя мера, и пользоваться либо не пользоваться аннотациями (типов) это ваше личное дело, к которому вас никто не принуждает... нет я не являюсь ярым сторонником аннотаций, но я не понимаю, почему они встречают такое ярое сопротивление.


Это сообщение отредактировал(а) v2v - 3.10.2008, 13:19


--------------------
PM   Вверх
Дрон
Дата 3.10.2008, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 6
Всего: 93



За свою практику в C# я регулярно пользуюсь всего одной аннотацией (в .net они называются атрибутами), которая к тому же не влияет на выполнение или компиляцию кода: DebuggerStepThrough - говорит отладчику, что не надо заходить внутрь метода.
Помимо прочего эпизодически приходилось пользоваться атрибутами для контроля сериализации: вроде NonSerializable - аналог ключевого слова transient в Java, и ещё какими-то на эту тему, сейчас уже не вспомню.

v2v, ты прав, никто не заставляет так писать -- но ведь, как я уже сказал: код приходится читать чаще, чем писать. А читать подобную ересь тяжело.

В .net проблема "неприсвоения" null в некором роде решена просто, там есть структуры (value type), которые не могут принимать null (хотя основное назначение value type совсем другое). Простейший пример структуры - примитивные типы вроде int, double и т.п.
С другой стороны описанная проблема вызова ToString(), когда переменная равна null тоже в некотором роде решена оператором ?? в C#, то есть я могу написать (something ?? "zzz").ToString() и тогда в случае если something == null будет использована строка "zzz"
Но это всё частные случаи -- просто вспомнилось smile

Добавлено @ 13:31
Возможно, меня смущает плохая читаемость аннотаций в Java из-за их синтаксиса. В .net принято писать [BlaBlaBla] вместо @BlaBlaBla и это мне нравится, потому как @BlaBlaBla у меня блоьше ассоциируется с переменными в SQL.

Это сообщение отредактировал(а) Дрон - 3.10.2008, 13:36


--------------------
Да. Именно так.
PM   Вверх
fixxer
Дата 3.10.2008, 13:33 (ссылка) |  (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 14.9.2006
Где: Саратов, Россия

Репутация: 6
Всего: 27



Цитата(v2v @ 3.10.2008,  13:19)
2all agains annotations, 
не знаю не знаю ... в JPA ведь уже давно реализованы такие аннотации и они пользуются большой популярностью из-за своего удобства.

Цитата(Дрон @  3.10.2008,  09:32 Найти цитируемый пост)

@NotEmpty List<@NonNull String> strings = new ArrayList<@NonNull String>();

так ведь вам и без аннотаций никто не мешает написать код , где чёрт ногу сломит ... всему есть своя мера, и пользоваться либо не пользоваться аннотациями (типов) это ваше личное дело, к которому вас никто не принуждает... нет я не являюсь ярым сторонником аннотаций, но я не понимаю, почему они встречают такое ярое сопротивление.

Когда аннотации к месту они хороши. В JPA, EJB3, для декларативной демаркации транзакций, для IoC в spring и guice, для fine-grained security, при назначении аспектов, для сериализации JAXB, для вебсервисов. То есть в тех местах, где из задача ортогональна функционалу основного кода. А вот когда аннотации начинают влиять на исполнение самого кода или даже компиляцию - это имхо перебор.

Это сообщение отредактировал(а) fixxer - 3.10.2008, 13:37


--------------------
user posted image
PM MAIL ICQ   Вверх
Дрон
Дата 3.10.2008, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 6
Всего: 93



Цитата(fixxer @  3.10.2008,  14:33 Найти цитируемый пост)
А вот когда аннотации начинают влиять на исполнение самого кода или даже компиляцию - это имхо перебор. 

В точку!

И, кстати, да -- хороший пример аннотации: декларативные транзакции, или декларативное security, мне правда не приходилось им на практике пользоваться, но "в домашних условиях" тестировал smile



--------------------
Да. Именно так.
PM   Вверх
w1nd
Дата 3.10.2008, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 20
Всего: 54



Цитата(fixxer @  3.10.2008,  13:33 Найти цитируемый пост)
А вот когда аннотации начинают влиять на исполнение самого кода или даже компиляцию - это имхо перебор.

Вообще-то аннотации в первую очередь для "влияния на компиляцию" и создавались :whlistle А как раз аннотации, обеспечивающие транзакции/безопасность/etc - это и есть аннотации, влияющие на исполнение. Что-то господа ортодоксы ломанулись в другую крайность smile 

Это сообщение отредактировал(а) w1nd - 3.10.2008, 13:45


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
polosatij
Дата 3.10.2008, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 1
Всего: 8



Цитата(v2v @  2.10.2008,  22:57 Найти цитируемый пост)
Если не ошибаюсь, Стандарт JSR-308 , который будет входить в 7ю яву , описывает как использовать аннотации вместе с типами (переменными).
например можно будет объявлять 
@NotNull
Integer a;
Но кроме этого будет возможность создавать свои аннотации с изощерённой логикой ... проверками, условиями и т.д...


всё-таки был смысл в поднятой моей теме  smile зачёт  smile  а то тут набросились на меня со всех сторон и пинают ногами  smile

хоть что-то новое узнали  smile 

Цитата(ecologist @  3.10.2008,  09:32 Найти цитируемый пост)
Я подозреваю, что меня тут сразу забанять за наезд, но по-моему Вы занимаетесь самолюбованием ...


человек говорящий это явно болеет самомнением.. 

---

тынц 



--------------------
PM   Вверх
LSD
Дата 3.10.2008, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(polosatij @  2.10.2008,  17:02 Найти цитируемый пост)
всё равно тебе придётся в методу встроить throw "new RuntimeException()";
если проект большой, то занимаешься простой ерундой с copy & paste, причём никто тебе не гарантирует, что ты при больших объёмах, запаришься и просмотришь что-нибудь..

Все Exception должны быть за декларированы, в том числе и RuntimeException. И если разработчик базового класса, решил что этот метод можно не реализовывать, то ему надо просто за декларировать что метод може выбрасывать UnsupportedOperationException и проблема решена (в Collection API полно примеров такого подхода). Разница между:
Код

public void doIt()
{
  throw new UnsupportedOperationException();
}

и
Код

@NotImplemented
public void doIt();

не настолько велика, чтобы ради неё менять язык.

А если тебе приходится в 100 классов реализовывать пустые методы и просто выкидывать в них исключение, то это опять же означает только плохое проектирование. Например в том же Collection API можно было бы сделать, два интерфейса List и унаследованный от него MutableList (при условии конечно, что востребованность ummutable листов было бы велика).



Цитата(polosatij @  2.10.2008,  17:02 Найти цитируемый пост)
я тебя понимаю, но это не всегда решается. у меня эта травла в проекте не решается..

Это проблема конкретного проекта и конкретных разработчиков, что у них хватило фантазии только на то, чтобы ошибку назвать Error. И вводить ради этого в язык новые сущности, не есть хорошо.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
fixxer
Дата 3.10.2008, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 14.9.2006
Где: Саратов, Россия

Репутация: 6
Всего: 27



Цитата(w1nd @ 3.10.2008,  13:45)
А как раз аннотации, обеспечивающие транзакции/безопасность/etc - это и есть аннотации, влияющие на исполнение. Что-то господа ортодоксы ломанулись в другую крайность smile

Я с тобой соглашусь, если ты уточнишь, что ты подразумеваешь под влияием на исполнение.

Код

@Entity
class Bean {...}


Наличие или отсутствие анотации @Entity никаким образом не влияет на возможность мною использовать этот бин, ни на исполнение кода этого бина. У меня может не быть никакой JPA, никакого персистанса вообще. Тем не менее я вполне могу использовать этот бин для каких-то своих черных целей.

Код

@Transactional
void buisinessMethod() {
  /* some buisiness code */
}


То же самое. Эти аннотации предоставляют информацию другим частям проекта. Они инфраструктурные.


--------------------
user posted image
PM MAIL ICQ   Вверх
w1nd
Дата 3.10.2008, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 20
Всего: 54



Цитата(fixxer @  3.10.2008,  14:22 Найти цитируемый пост)
Наличие или отсутствие анотации @Entity никаким образом не влияет на возможность мною использовать этот бин, ни на исполнение кода этого бина.

Да, пожалуй, я тут перебрал. 


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
v2v
Дата 3.10.2008, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 8
Всего: 56



Цитата(fixxer @  3.10.2008,  14:22 Найти цитируемый пост)

То же самое. Эти аннотации предоставляют информацию другим частям проекта. Они инфраструктурные. 



Цитата(fixxer @  3.10.2008,  14:22 Найти цитируемый пост)
Наличие или отсутствие анотации @Entity никаким образом не влияет на возможность мною использовать этот бин, ни на исполнение кода этого бина

я бы так не сказал...
расскажу про грабли, о которые я сильно ударился, буквально вчера.
Делал я рефакторинг в своём проекте..
Есть у меня дао классы , которые работают через hibernate c бд - сохраняют, удаляют, обновляют , получают записи  :

Код

@Repository
@Transactional
class EntityADaoImpl{
// do actions ... 
}


Таких классов было много , и наблюдалось заметное повторение кода.
Решил я создать абстрактного родителя, вынести туда одинаковый код.

создал:
Код

class AbstractDaoImpl{
// do basic actions ...
}

Ну и после расширил свои дао-классы этим родителем.

Запустил самописные тесты, которые перед этим выполнялись корректно: вроде бы всё Ок, данные пишутся, читаюсь, удаляются, обновляются ... ошибок нету. Но , немного спустя , заметил что в промежуточную таблицу, которую создаёт хибернэйт для отношения много-к-много никакие данные не сохраняются! Тоесть, не сохраняется именно отношение много-к-много ... это было очень странно, потому что во всех остальных отношениях (1-1,1-n,n-1) данные сохранялись правильно.

В общем, очень долго копал, перерыл весь свой код, написал кучу дополнительных тестов... ничего не помогло... Причина мне до сих пор не совсем понятна, я не поставил аннотации 
Код

@Repository
@Transactional

перед объявлением своего абстрактного класса!!!
ПОсле добавление этих самых аннотаций, всё стало на свои места... вот теперь скажите что аннотации не влияют на исполнение кода..




--------------------
PM   Вверх
LSD
Дата 3.10.2008, 16:22 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(v2v @  3.10.2008,  17:16 Найти цитируемый пост)
ПОсле добавление этих самых аннотаций, всё стало на свои места... вот теперь скажите что аннотации не влияют на исполнение кода..

Аннотации не влияют на исполнение кода на уровне JVM (а именно про это и говорит ТС). Но никто не мешает построить свою логику, основанную на данных из аннотаций.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
v2v
Дата 3.10.2008, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 8
Всего: 56



а возможно ли в аннотацию в качестве параметра передать переменную и как? 

Код

String s1 = "lala";

@SomeAnnotation(s1)            // <- ???
void someMethod(){
// ...
}



--------------------
PM   Вверх
w1nd
Дата 3.10.2008, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 20
Всего: 54



Аннотации - это статическая информация, доступная во время компиляции.


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
fixxer
Дата 3.10.2008, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 14.9.2006
Где: Саратов, Россия

Репутация: 6
Всего: 27



Цитата(w1nd @ 3.10.2008,  17:31)
Аннотации - это статическая информация, доступная во время компиляции.

Не обязательно только во время компиляции
Цитата
public enum RetentionPolicy
extends Enum<RetentionPolicy>

CLASS 
          Annotations are to be recorded in the class file by the compiler but need not be retained by the VM at run time.
RUNTIME 
          Annotations are to be recorded in the class file by the compiler and retained by the VM at run time, so they may be read reflectively.
SOURCE 
          Annotations are to be discarded by the compiler




--------------------
user posted image
PM MAIL ICQ   Вверх
w1nd
Дата 3.10.2008, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 20
Всего: 54



Цитата(fixxer @  3.10.2008,  17:47 Найти цитируемый пост)
Не обязательно только во время компиляции

Нет, вы цитату привели совсем не о том. Атрибуты аннотации должны быть вычислябельны на этапе компиляции.


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
w1nd
Дата 10.10.2008, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 20
Всего: 54



Цитата(w1nd @  3.10.2008,  11:17 Найти цитируемый пост)
Кстати, у меня идея появилась по поводу всех этих @NotNull. На самом деле тут уже совсем другая штука получается, вовсе не "умные самоисполняющиеся аннотации", да и всё необходимое уже есть. Например, можно было бы реализовать нормальную поддержку константных объектов

Идея не выдержала испытания реальностью. В apt не предусмотрен процессинг аннотаций внутри методов, так что возможность аннотировать локальные переменные не может быть использована в принципе smile Как всегда не доделали...

Это сообщение отредактировал(а) w1nd - 10.10.2008, 16:31


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1512 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.