картина ночи
Jan. 2nd, 2007 12:53 amДжорджо де Кирико, "Пророк" (1915)

"Мы привыкли шутить, что самый частый пароль - 'password'. Теперь оказывается, что самый частый пароль - 'password1'. Кто сказал, что пользователи ничему не научились?"
-- Bruce Schneier, Real-World Passwords
Это будет интересно только программистам.
Мне пришло в голову пару дней назад, что нет собственно причины, по которой в Джаве должно быть ключевое слово implements. Наверное, это тривиальная мысль, но мне до сих пор не приходила в голову.
Предположим, у нас есть интерфейс Foo и класс Bar. Предположим, в классе есть определения всех методов, которые перечислены в интерфейсе, с правильными аргументами, типами возврата и другими атрибутами. Значит, компилятор может этот факт в любой момент проверить напрямую, сверив определения класса и интерфейса (причем класс может быть в скомпилированной форме). В любом месте, где мы хотим использовать объект класса Bar (или его подкласса), а ожидают интерфейс Foo - например, в списке аргументов какого-то метода - сейчас компилятор проверяет правильность подстановки, основываясь на том, что в определении Bar написано "implements Foo". Но если бы не было написано, он все равно мог бы проверить правильность подстановки, просто напрямую сравнив типы методов класса и интерфейса.
(Я что-то упускаю тут или правильно все описал?)
Если это ключевое слово не нужно, зачем же оно есть? ( Read more... )
См. также интересную статью JavaGI: Generalized Interfaces for Java, которая натолкнула меня на эту нехитрую мысль. JavaGI - интересная попытка внести в Джаву идею type classes из Haskell. ( Read more... )