Ответы пользователя по тегу Java
  • Новые возможности java 8, использовать или нет?

    Можно начать с малого, если боитесь стримов. Скажем, такой фрагмент кода на Java7:

    Map<String, List<Item>> items = new HashMap<>();
    
    public void addItem(String key, Item item) {
      List<Item> list = items.get(key);
      if(list == null) {
        list = new ArrayList<>();
        items.put(key, list);
      }
      list.add(item);
    }


    Нечто подобное встречается очень часто. В Java 8 это выглядит так:
    Map<String, List<Item>> items = new HashMap<>();
    
    public void addItem(String key, Item item) {
      items.computeIfAbsent(key, k -> new ArrayList<>()).add(item);
    }


    Не только короче, но и быстрее, потому что ключ ищется один раз, а не два в случае вставки. Если же у вас ConcurrentMap, то правильный алгоритм вычисления несуществующего ключа, который бы минимально блокировал мэпку и при этом выполнялся не более одного раза, раньше написать было вообще нетривиально. А теперь так же, в одну строчку.
    Ответ написан
    Комментировать
  • Есть ли возможность дать мне небольшую задачу реального проекта?

    Идите в любой опенсорсный проект на Java, который вам по вкусу. В https://bugs.eclipse.org/bugs/ , например, тысячи открытых багов. Выбирайте любой, пытайтесь исправить и шлите пулл-реквесты. Есть довольно простые штуки, до которых просто ни у кого руки не дошли. Даже просто разобравшись в инфраструктуре большого проекта, вы получите ценнейший опыт, да и в резюме будет что написать. Если Eclipse пугает своим размером, есть много проектов попроще. Можно повыбирать, например, на mvnrepository.com . Конкретную задачу сложно посоветовать, не зная ваш уровень и интересы. Может, вы алгоритмы любите, может, интерфейс рисовать, может, графику, может, с базами данных поковыряться.
    Ответ написан
    1 комментарий
  • Что не так с чтением из консоли?

    Без исходника приходится проявлять телепатические способности. Скорее всего кто-то где-то закрывает BufferedInputStream, который в System.in. Поставьте брейкпоинт на вход в метод BufferedInputStream.close() и посмотрите, как вы там оказываетесь. Если туда попадаете слишком часто, сделайте брейкпоинт условным по this == System.in.
    Ответ написан
    Комментировать
  • Как программно создать jar?

    В JDK есть стандартный класс JarOutputStream, который вам поможет. Вот тут пример записи в JarOutputStream вместе с манифестом.
    Ответ написан
    Комментировать
  • Почему на Java не разрабатывают операционные системы?

    Ну таки разрабатывали в разное время: JavaOS, JX, SavaJe, Vino. Все эти разработки свернули по разным причинам, но принципиальных проблем, абсолютно мешающих разрабатывать OS на Java как будто бы нет.
    Ответ написан
    3 комментария
  • В чем разница new ArrayList() и new ArrayList()?

    Конкретно в данном случае в Java 1.7 и старше вы не получите никаких видимых отличий кроме наличия или отсутствия двух предупреждений при компиляции. Но, конечно, угловые скобки лучше писать. Отсутствие угловых скобок означает «сперва я конструирую непараметризованный вообще объект, а котом присваиваю его в переменную, используя небезопасное приведение типов», а наличие их означает «подбери подходящие параметры для объекта на основе контекста». Разница может проявиться, например, в таком коде:

    class NumberList<T extends Number> extends ArrayList<T> { ... }
    
    public static void main(String... args) {
        List<String> list = new NumberList();
        ...
    }


    Этот код компилируется (с предупреждениями), но у вас могут возникнуть странные проблемы в рантайме. Если же вы поставите две угловые скобки, тут же будет ошибка компиляции: подходящий тип вывести нельзя.
    Ответ написан
    Комментировать
  • Плакаты на java тематику для офиса, где взять?

    Если у вас не всё пространство перед глазами занято мониторами, купите второй (третий, четвёртый) монитор. Я в офисе работаю с тремя мониторами, а вокруг голые стены. Продуктивность нормальная.
    Ответ написан
    Комментировать
  • Правила объявления интерфейсов. "I" или "!I"?

    В нашей команде префикс «I» не используют. Все правильно говорят: это соглашение имеет плюсы и минусы и в целом дело личного вкуса. Есть много очень хороших проектов, где I используют, и где I не используют. Главное, чтобы это не превращалось в религию. Если вас на работе смешивают с дерьмом, подумайте, нужна ли вам такая работа :-)
    Ответ написан
    Комментировать