пятница, 7 марта 2008 г.

Java Puzzle 73: Your Privates Are Showing

Идея этой головоломки - дать понять, что private члены класса не настолько приватные, как принято думать. Например, при использовани сериализации по-умолчанию все private поля класса становятся частью экспортируемого API. Ну и задача состоит в том, чтобы написать в некоторой библиотеке что-нибудь приватное так, чтобы перестал компилироваться клиент, который использует эту библиотеку. Авторы предлагают раскомментировать строчку в следующей программе:
package library;
public final class Library {
// private static class String {}
public static String newString() {
return new String();
}
}
package client;
import library.Library;
public final class Client {
private String str = Library.newString();
}

Ну или в следующей:
package library;
class AbstractLibrary {
public static final int ANSWER = 42;
}
public final class Library extends AbstractLibrary {
// private static final int ANSWER = 6 * 7;
}
package client;
import library.Library;
public final class Client {
private int answer = Library.ANSWER;
}

Вывод: переиспользование имён опасно, избегайте сокрытия и затенения...

Комментариев нет:

Отправить комментарий