Ответы пользователя по тегу Java
  • Почему в webapp сразу создается сессия?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Наверное, потому, что если приходит запрос get (метод doGet), то и приходит он уже внутри сессии?
    А приходит он с параметрами: HttpServletRequest request, HttpServletResponse response
    Ну и дальше по схеме: HttpSession httpSession = request.getSession();
    Ответ написан
  • Что означают предупреждения "unchecked method invocation" и "unchecked conversion"?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    У меня, кстати, и так все компилируется и работает.
    Предлагаю два варианта решения:
    1. Т.к. класс ComplexCompare, похоже, нигде больше не используется (и вряд ли будет) перенести его как анонимный в инициализацию TreeSet:
    TreeSet<Complex> ts = new TreeSet<>(new Comparator<Complex>() {
                @Override
                public int compare(Complex o1, Complex o2) {
                    double re1 = o1.getRe(), im1 = o1.getIm();   //Все это можно упростить.
                    double re2 = o2.getRe(), im2 = o2.getIm();
                    if (re1 != re2) return (int)(re1 - re2);
                    else if (im1 != im2) return (int)(im1 - im2);
                    else return 0;
                }
            });


    2. Сделать класс Complex implements Comparable и добавить соответствующий метод compareTo с аналогичным кодом: тогда и компараторы дополнительные не потребуются.
    Ответ написан
  • Что не так? Почему не компилируется?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Главная причина - "Non-ASCII character in an identifier".
    У вас классы называются русскими буквами "А" и "В", а в методе main потом используются английские "A" и "B".
    Мой совет на будущее, чтобы этого избежать, используйте 100% английскую раскладку - даже для того чтобы писать комментарии.

    Насчет "static class А": если класс static - он уже инстанцирован при запуске, new A() сделать не получится.
    "B.this.s" - выглядит довольно странно.

    Итого, для того чтобы заработало, нужно:
    1. Все классы назвать одинаково (одинаковыми символами в одинаковой раскладке)
    2. Убрать два раза "static" для классов A и AB
    Ответ написан
    5 комментариев
  • Как открыть доступ к локальному серверу на apache tomcat(java) извне?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Динамический DNS обещает лишь разрешение вашего доменного адреса в ваш ip. Но! Если ваш провайдер в свою очередь не открыл порт(ы) на вашу машину - ничего не выйдет. Разрешаться будет ip провайдера.
    Dynamic DNS полезен в том случае, если вы при подключении к интернету получаете белый (доступный по всем портам снаружи) но динамический ip, и бесполезен если вы за NAT провайдера (т.н. серый ip).
    Ответ написан
    1 комментарий
  • Как пишут REST API на Java?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Самый простой вариант:
    sparkjava.com

    На первой странице пример - сервер в одну строку.
    "Разворачивать" много не надо. Просто запускаешь и оно работает.
    Ответ написан
    Комментировать
  • Почему C++ лучше для игрового движка, а не Java?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Язык программирования - это инструмент решения задач.
    Java, C, Js, Python.... это все инструменты.
    И так же, как молоток подходит для заколачивания гвоздей, а отвертка - для закручивания шурупов, Java подходит для написания приложений с мощной логикой, а Js, например, для веселых страничек в интернете.
    Можно и молотком шурупы "закручивать" и отверткой гвозди забивать, но гораздо эффективней использовать инструменты по прямому назначению.
    Холивары тут бессмысленны и бесполезны - не стоит сравнивать Java и C++. Никто же не спорит о молотках против отверток (всем же понятно, что молотком - быстрее)). В каких то задачах уместнее использовать Java, в каких-то - плюсы.
    Ответ написан
    Комментировать
  • Как программно дать имя экземпляру класса?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Используй, например List :
    List<Player> playerList = new ArrayList<>;

    и добавляй туда своих игроков:
    list.add(new Player(name) );
    Ответ написан
    1 комментарий
  • Стоит ли изучать Kotlin, если не знаешь Java?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Является или не является - покажет время.
    Kotlin - не первый язык (и, наверное, не последний), который использует jvm (Пруф: https://ru.wikipedia.org/wiki/Список_языков_JVM ) и не один из них не "замена", хотя и занимает определенную нишу.
    Стоит или не стоит - на этот вопрос никто не ответит. Это вопрос очень личный. Смотря для чего? Чтобы устроиться на работу? Начать свой проект? Размять мозги?
    Ответ написан
    3 комментария
  • Можно сделать чтение со страницы в несколько потоков??

    xez
    @xez Куратор тега Java
    TL Junior Roo
    "можно ли сделать чтение со страницы в несколько потоков?" - на счет этого стоит подумать еще до написания кода.
    Предположим у вас есть книга, и вы решили ее читать одновременно какой-то компанией. Как бы вы это организовали?
    Первое, что приходит в голову - найти ответственного "диспетчера", который будет выдавать порции страниц каждому участнику.
    Но что, если книга не разделена на страницы? Как ее делить тогда? Получается, нужно чтобы вначале ее кто-то прочитал, потом поделил, потом уже раздал части. Но зачем тогда читать уже прочитанную книгу (если, конечно, цель только в самом факте чтения)?
    Ответ написан
    5 комментариев
  • Действительно ли Messenger - это антипаттерн?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Что то я не вижу никакой связи между RxJava и JMS. Это сравнение правил дорожного движения со стандартами коробки передач.

    RxJava - о событиях внутри приложения.
    JMS - о событиях между приложениями (возможно даже на разных языках и платформах).
    Ответ написан
    2 комментария
  • Как в программе сервере на JAVA лучше реализовать многопоточность?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Ровно по этому вопросу есть видео, в котором Heinz Kabutz все подробно рассказывает:
    https://www.youtube.com/watch?v=uKc0Gx_lPsg
    Ответ написан
    Комментировать
  • Где размещать переменные: класс или метод?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    #1 от #2 отличаются только явной инициализацией переменной во втором случае. В первом - она инициализируется при создании объекта.
    #3 и #4 сами по себе вполне корректны, но бессмыслены: ht, я так понимаю - рост кошки. Нет никакого смысла переносить эту переменную внутрь метода. Метода может и не быть, а рост, видимо, быть должен. Кроме того, если бы в классе Cat были еще какие-то методы (например int getHeight() ), то они не имели возможность получить доступ к этой переменной в последних случаях.

    Вот еще пример:
    public class Cat {
        int height;
    
        public int getHeight() {
            return height;               //Все ок переменную видно.
        }
    
        public void setHeight(int height) {
            this.height = height;    //Все ок переменную видно. this.height - эта переменная, обозначенная в классе.
        }
    
        public void setInternalVar(int var) {
            int internalVar = var;   //Все ок, но переменная скрыта внутри метода
        }
        
        public int getInternalVar() {
            return internalVar;   // !!Не компилируется  - переменная internalVar не определена внутри класса.
        }
    }
    Ответ написан
    Комментировать
  • Правильно ли я пользуюсь try with resources или в чём тут проблемма?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Может и не заходить, если Connection con = connectionPool.getConnection() бросает эксепшн.
    Попробуй подебажить и/или в блок catch добавить какой-нибудь System.out.println("Inside catch block!");
    Ответ написан
    5 комментариев
  • Почему не работает вариант с HashMap?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    1. Map - это структура типа {Key, Value} - у вас перепутаны местами ключ и значение.
    2. int number = 0 - должно стоять в другом месте.
    3. Изучите методы класса Map - эту задачу можно решить в один цикл.
    Ответ написан
    2 комментария
  • С чего начать учить Java 8?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    И Хорстманн и Шилдт хороши. По поводу именно java 8 особо заморачиваться не стоит. Изменения там носят скорее эволюционный характер, потом как-нибудь доучишь уже.
    Ответ написан
    4 комментария
  • Можно ли возможностями java передать файл или текст с устройства на другое устройство?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Погугли "Java socket".
    Вот, например, на первой странице: www.dokwork.ru/2012/02/http-java-tcp.html
    Ответ написан
    Комментировать
  • Почему при запуске и остановке сервера нет сообщений?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Это проблема хрома.
    Попробуй 127.0.0.1:8080
    Ну или вот так можно:
    superuser.com/questions/646304/google-chrome-cant-...
    Ответ написан
    Комментировать
  • Ваше мнение. Какой способ ввода лучший?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Ответ: никакой.

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

    Насчет буфера:

    Выглядит это примерно так
    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    String s = reader.readLine();


    Мне этот вариант (с буффером) больше нравится: для ввода из файла разница будет небольшая (для текста):

    BufferedReader reader = new BufferedReader(new FileReader("input.txt"));
    String s = reader.readLine();


    Вот тут обсуждение можно почитать, на тему "Что лучше?" javatalks.ru/topics/25752
    Ответ написан
    Комментировать
  • Проблемы с IF в Java?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Main.java:15: error: cannot find symbol
    for (int i = 0; i < odd.size(); i++)
    ^
    symbol: variable odd
    location: class Ideone

    Java не видит переменную odd, то же самое с even и other

    Они у тебя объявлены в main
    а printList туда доступа не имеет.

    В качества quikFix-а могу предложить вынести из метода main.

    static ArrayList<Integer> even = new ArrayList<>();
            static ArrayList<Integer> odd = new ArrayList<>();
            static ArrayList<Integer> other = new ArrayList<>();


    Это будет компилироваться, но вообще-то лучше так не делать.
    Ответ написан
    Комментировать
  • Поясните код Java?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Вот что происходит после компиляции:

    //
    // Source code recreated from a .class file by IntelliJ IDEA
    // (powered by Fernflower decompiler)
    //
    
    public class test {
        public test() {
        }
    
        public static void main(String[] args) {
            byte a = 1;
            byte b = 2;
            byte var10000 = a;
            a = b;
            int b1 = var10000 + 0 * b;
            System.out.println(b1 + " " + a);
        }
    }


    Как можно заметить, никакой магии здесь нет.

    В общем и целом я не рекомендую использовать такую "магию". Гораздо лучше писать понятный и очевидный код.
    Ответ написан
    Комментировать