{java puzzlers} Joshua Bloch: Tiger Trap [part II]
5. "What the Bleep"
public class Bleep {
String name = "Bleep";
void setName(String name) {this.name = name}
void backgroundSetName() throws InterruptedException {
Thread t = new Thread() {
@Override public void run() { setName("Blat"); }
}
t.start();
t.join();
System.out.println(name);
}
public static void main(String[] args) {
new Bleep().backgroundSetName();
}
}
Ответ: «Bleep»
Объяснение:
Bleep.setName не будет вызван. У класса Thread тоже есть setName(String)
Мораль:
1. Не расширяйте Thread — используйте new Thread(Runnable) вместо этого.
2. А ещё лучше используйте Executor Framework — более гибкий. Смотри java.util.concurrent для деталей.
3. Избегайте shadowing (скрытия методов)
6. "Beyond Compare"
public class BeyondCompare {
public static void main(String[] args) {
Object o = new Integer(3);
System.out.println(new Double(3).compareTo(o) == 0);
}
}
Ответ: Не скомпилится: "compareTo(Double) in Double cannot be applied to (Object)".
Объяснение:
Comparable интерфейс был generified в Java 5
Мораль:
1. Бинарная совместимость осталась
2. Совместимость на уровне исходного кода сломалась — по разумной причине.
3. Обращайте внимания на сообщения компилятора.
7. "Fib O’Nacci"
public class Fibonacci {
private static final int LENGTH = 7;
public static void main(String[] args) {
int[] fib = new int[LENGTH];
fib[0] = fib[1] = 1;
for (int i=2; i<LENGTH; i++)
fib[i] = fib[i-2] + fib[i-1];
System.out.println(Arrays.asList(fib));
}
}
Ответ: Разный. Выведет хэшкоды.
Объяснение:
Arrays.asList работает только для массива ссылок на объекты.
Мораль:
1. Используйте скупо varargs в API — так как он скрывает ошибки, может вызывать путаницу.
2. Arrays.asList для печати — устарела, используйте Arrays.toString — красивее, безопаснее
8. "Parsing Is Such Sweet Sorrow"
public class Parsing {
public static Integer parseInt(String s) {
return (s == null) ? (Integer) null : Integer.parseInt(s);
}
public static void main(String[] args) {
System.out.println( parseInt("-1") + " " + parseInt(null) + " " + parseInt("1"));
}
}
Объяснение:
Программа пытается сделать auto-unboxing на null
При замене Integer.parseInt(s) на Integer.valueOf(s) даст терпимый «-1 null 1».
Мораль:
1. Смешивание типов — вызывает путаницу, особенно для ? : оператора.
2. Избегайте null где возможно.
3. Auto-unboxing и null — опасная смесь.
Вам это будет интересно!
Последние новости
Слово
Назови человека свиньей, и он захрюкает. Пословица Проживая данную нам жизнь, мы все время находимся в гуще энергий, как положительных, так и отрицательных. По этическим нормам слово обладает определенной силой, следовательно, когда мы клевещем на человека, судим, обзываем, мы «де...Читать далее »
ЭГРЕГОР
Энергия эгрегора – квантовая структура, которая сформирована мыслями, знаниями и чувствами всего человечества – бывшего, настоящего и будущего. Эгрегор – это квантово лептонная скоррелированная структура, рожденная похожими мы...Читать далее »
Как открыть свои чакры
Открытие чакр увеличивает поток энергии в теле и вокруг него и, следовательно, улучшает наше физическое, ментальное и эмоциональное здоровье. Представьте себе каждую чакру по очереди. Они вращаются и становятся больше в размере. Начинайте с 1 – й чакры (пусть они вращаются в любую сторону, обычно они вращаются в разные). В то же ...Читать далее »
Смерть или новая жизнь
Из разговора двух зародышей в утробе матери: – Как ты думаешь, есть ли жизнь после родов? – Не знаю, оттуда еще никто не возвращался… Сравнительно недавно появились сенсационные сообщения доктора Раймонда А. Моуди о том, что ученые зарегистрировали фа...Читать далее »
Чакры
Чакры являются основными энергетическими органами биополя. Они контролируют нашу деятельность во внешнем мире, а каждая из чакр несет ответственность за определенную сферу деятельности. Основное предназначение их заключается в том, что они несут ответственность за поддержание энергообмена живого организма с окружающей средой через специальные каналы связи. Таким образом, при нарушении процесса энергообмена у нас возникают болезни и проблемы...Читать далее »
Три колонны космоса
Показания: нарушение обменных процессов, снижение иммунитета, обновление сил. Методика исполнения. Средний и сердечный пальцы правой руки кладут на аналогичные пальцы левой руки. Мизинец левой руки кладут возле основания тыльной поверхности среднего и безымянного пальцев правой руки, затем все фиксируется мизинцем правой руки. Кон...Читать далее »
Заключение
Лучше зажечь свечу, чем проклинать сгущающуюся тьму. Дзенское изречение Вот и написана книга. Мне хочется верить, что вам она обязательно поможет в познании себя, утверждении своего «Я», определении своего места во Вселенной. На ум приходит китайская пословица: «Если не менять направление, мы наверняка достигнем того, к чему идем». А мы идем к Свету, Добру и Счастью. Мы ...Читать далее »
