• Смысл сокрытия, когда есть рефлексия?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Сокрытие в целом и модификаторы доступа в частности - это не про защиту от злонамеренных хакеров, взламывающих ваш код. Модификаторы доступа нужны для предотвращения непреднамеренно ошибочного использования объектов. В больших системах бывает сложно уследить, что один объект из сотен, в одном из тысяч возможных состояний программы не нарушает инварианты другого объекта. Весь ООП нужен для снижения сложности кода.

    А рефлексия - это чёрных ход в JVM. Рефлексивный код медленный и небезопасный. Он наоборот увеличивает сложность и сводит к нулю половину достоинств языка. Применять рефлексию допустимо только при разработке инструментальных средств и фреймворков. И даже при этом стоит стремиться сократить обращение к ней.

    Образно говоря, вам необязательно пить и есть, питаться вы можете и через капельницу. Но это не значит, что вам не нужны зубы и 5 метров кишечника.
    Ответ написан
    1 комментарий
  • Как привести целое число к типу double а затем разделить его?

    @frozen_coder
    Java-developer
    System.out.println("a/b = " +e); // double

    Вы пытаетесь вывести неинициализированную переменную, на что вам компилятор английским языком это говорить должен. Читайте его сообщения. Сначала выводите с, а потом e.
    Если вы хотите получить результат деления с дробной частью, то вам надо явно привести один из аргументов при делении к double. Например,
    e = (double) a / b;
    Результат деления int на int будет int, а это значит, что дробная часть будет просто отброшена даже без округления. Поэтому даже если вы сохраняете результат такого деления в double, то в дробной части получите 0. Если же один из аргументов при делении double, то результат будет double с дробной частью.

    P.S. Пожалуйста, возьмите любой учебник по java и прочитайте его. Читайте, что вам пишет компилятор. Следуя этим двум простым советам, количество вопросов будет сведено к минимуму.
    Ответ написан
    4 комментария
  • Функция calculate_value()?

    amarao
    @amarao
    `calculate_value()` со скобками - это вызов функции, а не использование функции как значения. В rv попадает то, что возвращает функция `calculate_value`. Что именно эта функция делает и что она возвращает можно понять одним из двух способов: 1) посмотреть на её исходный текст 2) в отладчике (например, pdb) дойти до этого места и сделать интроспекцию для `rv`, команды: dir(rv), type(rv), help(rv).

    По поводу NameError - это означает, что функция не найдена. Она должна быть либо импортирована из модуля, либо написана, либо сконструирована динамически где-то в программе до первого своего вызова.
    Ответ написан
    Комментировать
  • Почему изображение в scr="" не выводится?

    @dasauser
    Пишу на PHP
    g8 = '</p><img scr=';
    поменяйте scr на src
    Ответ написан