{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"));
	}
}

Ответ: NullPointerException

Объяснение:
Программа пытается сделать auto-unboxing на null
При замене Integer.parseInt(s) на Integer.valueOf(s) даст терпимый «-1 null 1».

Мораль:
1. Смешивание типов — вызывает путаницу, особенно для ? : оператора.
2. Избегайте null где возможно.
3. Auto-unboxing и null — опасная смесь.




























Вам это будет интересно!

  • {java puzzlers} Joshua Bloch: Tiger Trap
  • {java puzzlers} Josh Bloch: Java Puzzlers Epizode VI
  • {java puzzler} инициализация классов и конструирование объектов
  • Post form from java use Socets
  • {java} Java Language Specification
  • Последние новости

    Слово

    Назови человека свиньей, и он захрюкает. Пословица Проживая данную нам жизнь, мы все время находимся в гуще энергий, как положительных, так и отрицательных. По этическим нормам слово обладает определенной силой, следовательно, когда мы клевещем на человека, судим, обзываем, мы «де...
    Читать далее »

    ЭГРЕГОР

    Энергия эгрегора – квантовая структура, которая сформирована мыслями, знаниями и чувствами всего человечества – бывшего, настоящего и будущего. Эгрегор – это квантово лептонная скоррелированная структура, рожденная похожими мы...
    Читать далее »

    Как открыть свои чакры

    Открытие чакр увеличивает поток энергии в теле и вокруг него и, следовательно, улучшает наше физическое, ментальное и эмоциональное здоровье. Представьте себе каждую чакру по очереди. Они вращаются и становятся больше в размере. Начинайте с 1 – й чакры (пусть они вращаются в любую сторону, обычно они вращаются в разные). В то же ...
    Читать далее »

    Смерть или новая жизнь

    Из разговора двух зародышей в утробе матери: – Как ты думаешь, есть ли жизнь после родов? – Не знаю, оттуда еще никто не возвращался… Сравнительно недавно появились сенсационные сообщения доктора Раймонда А. Моуди о том, что ученые зарегистрировали фа...
    Читать далее »

    Чакры

    Чакры являются основными энергетическими органами биополя. Они контролируют нашу деятельность во внешнем мире, а каждая из чакр несет ответственность за определенную сферу деятельности. Основное предназначение их заключается в том, что они несут ответственность за поддержание энергообмена живого организма с окружающей средой через специальные каналы связи. Таким образом, при нарушении процесса энергообмена у нас возникают болезни и проблемы...
    Читать далее »

    Три колонны космоса

    Показания: нарушение обменных процессов, снижение иммунитета, обновление сил. Методика исполнения. Средний и сердечный пальцы правой руки кладут на аналогичные пальцы левой руки. Мизинец левой руки кладут возле основания тыльной поверхности среднего и безымянного пальцев правой руки, затем все фиксируется мизинцем правой руки. Кон...
    Читать далее »

    Заключение

    Лучше зажечь свечу, чем проклинать сгущающуюся тьму. Дзенское изречение Вот и написана книга. Мне хочется верить, что вам она обязательно поможет в познании себя, утверждении своего «Я», определении своего места во Вселенной. На ум приходит китайская пословица: «Если не менять направление, мы наверняка достигнем того, к чему идем». А мы идем к Свету, Добру и Счастью. Мы ...
    Читать далее »