Показаны сообщения с ярлыком core. Показать все сообщения
Показаны сообщения с ярлыком core. Показать все сообщения

среда, 8 декабря 2010 г.

Знакомство Runtime.exec()

Недавно захотелось запустить 'нечто' из Java приложения. В роли 'нечто' был 7Zip, в роли приложение было обычный SE класс с методом main().
Так вот, наткнулся на несколько интересный моментов.

Консольный ввод/вывод нового процесса

Итак, у java.lang.Process есть методы позволяющие работать с stdin, stdout и stderr потоками. Но выяснилось, что не все, что выводится на консоль, попадает в потоки stdout/stderr. Для примера можно запустить 7z.exe b. Есть предположение, что подобным образом ведут себя почти все Java приложения. Также есть предположение, что виной этому работа с буфером консоли 'напрямую' (насколько я понял из объяснений, например это вывод символа в заданную позицию консоли).

Скользкие моменты java.lang.Process

Очень понравилась статья When Runtime.exec() won't

среда, 24 ноября 2010 г.

Быстрое преобразование элемента в коллекцию

Часто встречаются методы, которые принимают коллекции в качестве параметра. Например:
public void print(Collection<string> strings){
  System.out.println("strings: "+ strings);
}

И часто необходимо вызвать эти методы имея всего один элемент. Обычно делают так:
List<string> strings = new ArrayList<string>();
strings.add(str);

print(strings);

но можно сделать и более короткую запись:
print(Collections.singletonList(str));

Из потенциальных неудобств можно отметить то, что Collections.singletonList() возвращает не модифицируемую коллекцию (Добавит элементы в нее уже не получится).

суббота, 9 октября 2010 г.

Трюки с оберточными типами

Недавно коллеги заставили меня немножечко удивиться офигеть. Началось с того, что прислали вот такой код, и спросили каким же будет результат:
Integer a1 = 123;
Integer a2 = 123;
boolean result = a1 == a2;

Наивно полагая, что я неплохо знаю основы языка, я конечно же ответил false.
Оказалось что во первых: "а вот и нифига не правильно (т.е. result == true)", a во вторых: "такой ответ не всегда такой".