20 февраля 2012 г.

java.io.File is not immutable

Удивительно, но факт: несмотря на то, что контракт java.io.File явно указывает, что Instances of the File class are immutable; that is, once created, the abstract pathname represented by a File object will never change., однако поле File.path -- не final. Почему оно не-final тоже, в общем-то, понятно -- чертова сериализация, мать ее. Однако от нарушения контракта это не спасает. Я, поначалу, думал, что возможно safe publishing обеспечивается неявным мембаром при вызове какого-нибудь нативного метода в ходе инициализации -- но нет, авторитетные источники подтверждают -- баг как баг. И место его возле параши теперь здесь. Правда, приоритет Low, и поправлен будет не раньше 1.8 -- а до тех пор считать объект File immutable в том смысле, в котором это понимают в concurrency -- строго говоря, нельзя.

Такие вот у нас печеньки...

2 комментария:

  1. А багу ты постил?
    Неужели уже пофиксили судя по статусу?

    ОтветитьУдалить
  2. Нет, пока я пытался уточнить, баг ли это, или я чего-то не понимаю -- баг запостили за меня.

    Ну пофиксили, да -- долго ли. Но увидим-то мы это только в 8-ке судя по всему...

    ОтветитьУдалить