Бесплатно скачать Adobe Flash Player
Flash Ripper RSS Readers

1044: Interface method X in namespace Y not implemented by class Z

Наверняка каждый, кто использует интерфейсы в AS3, однажды получал такую ошибку. Меня она всегда ставит перед вопросом: как это "not implemented", если я реализовал ('имплементировал') метод интерфейса в классе? Каждый раз я нахожу ответ заново:

  1. Объявленный в интерфейсе метод и его реализация в классе должны быть публичными, т.е. иметь модификаторы доступа public.
  2. Объявленный в интерфейсе метод и его реализация в классе должны быть публичными, т.е. иметь модификаторы доступа public.
  3. Объявленный в интерфейсе метод и его реализация в классе должны быть публичными, т.е. иметь модификаторы доступа public.

Записал три раза, а вдруг все же запомню? Моя хитрая память отказывается работать с тем, что я считаю нелогичным. Поэтому я не люблю хаки: почти все хаки нужно зазубривать, а это — насилие над сознанием. 'Логическое обоснование' хака — еще хуже.

В случае с данной ошибкой моя логика блокирует запоминание верного ответа дважды:

  1. В сообщении об ошибке сказано, что метод интерфейса не реализован вовсе ('not implemented'), хотя должно быть сказано, что он имеет неверный модификатор доступа (что он не-паблик, а должен быть паблик).
  2. Я не могу принять тот факт, что объявленные в интерфейсе методы могут быть только публичными. А если мне нужен internal-метод для использования внутри пакета, которому принадлежит данный интерфейс и реализующие его классы?
Вот это, второе, хотелось бы обсудить. Чувствую, что чего-то важного не понимаю.

Писал Rost, 19 Декабрь 2007 13:21

Найдены баги:

Тогда можно сделать сам интерфейс internal.

Junik - 19 Декабрь 2007 13:53

>> Тогда можно сделать сам интерфейс internal.

Хорошая мысль! Кстати, пока писал этот пост, подумал, что будет ответ от тебя, но не ожидал, что так быстро :)

Рост - 19 Декабрь 2007 13:57

>> Хорошая мысль! Кстати, пока писал этот пост, подумал, что будет ответ от тебя, но не ожидал, что так быстро :)

Я слежу за тобой. :)

Junik - 19 Декабрь 2007 14:10

Ну интерфейсы были придуманны для задания API (Application Public Interface) вот поэтому и паблик.
Если нужно сделать метод скрытым, можно использовать кастомный публичный неймспейс:
package eu.orangeflash
{
public namespace orange = "http://orangeflash.eu";
}


nirth - 19 Декабрь 2007 15:31

"Объявленный в интерфейсе метод и его реализация в классе должны быть публичными"

Насколько я знаю, public должно стоять в реализации. В объявлении в интерфейсе никаких public не нужно.

У меня другие постоянные грабли... Это когда пакет класса я начинаю, допустим, с
package myclasses { }
а интерфейс
package {}
и долго потом фтыкаю в чем трабл.

"Я не могу принять тот факт, что объявленные в интерфейсе методы могут быть только публичными"

Interface definitions may only be modified by the public and internal access control specifiers - гласит справка.

FlaM - 19 Декабрь 2007 16:08

Согласен с Nirth. В большинстве случаев применение кастомного неймспейса адекватнее использования internal, поскольку часто "внутренняя" логика расползается по нескольким пакаджам.

Артемий Малков - 19 Декабрь 2007 18:07

Спасибо ответившим! Мне действительно стала намного понятнее логика работы AS3-интерфейсов. Получается, кое-чего я действительно не знал или же не уделял ему должного внимания.

Рост - 19 Декабрь 2007 18:25

кастомные нэймспэйсы убивают всю безопасность модели, так как кастомные нэймспэйс можно заюзать в любом месте. кастомный нэймспэйс этот тот же паблик. только вид с боку :)

BlooDHounD - 19 Декабрь 2007 22:29

кастомные нэймспэйсы убивают всю безопасность модели, так как кастомные нэймспэйс можно заюзать в любом месте. кастомный нэймспэйс этот тот же паблик. только вид с боку :)

Ну я сконен доверять коллегам программистам, если они сломают фреймворк, это чисто их проблемы.

nirth - 20 Декабрь 2007 2:37

а я не склонен доверять нашим пользователям, среди которых есть люди желающие навредить :) чем меньше у них степеней свободы, тем лучше.

BlooDHounD - 21 Декабрь 2007 11:20



Это запись из категории 'AS3'. 10 еще cвежих:

Архивы по категориям:

3D-18, Adobe AIR-38, Animation-1, Apache Ant-1, Architecture-1, ARP-1, Art-26, Articles-26, AS3-57, Books-9, Business-3, Cairngorm-3, CI-1, Classes-10, Coding-31, Community-118, Components-19, Contests-30, conventions-1, Cool-Job-10, Debug-21, Design-28, Development-84, ecology-4, EMO-2, Events-17, Extensions-2, FAQ-9, FDS-1, Flash and html-8, Flash Player-38, Flash Updates-12, flash-on-devices-1, Flash-scene-1, flash10-4, FlashLite-2, Flex-49, Flex 2-80, flex4-3, flexcamp-2, Flickr-1, FMS-2, FPUG-61, frameworks-1, Games-20, Good Job!-44, HaXe-16, Health-2, Humor-11, Ideas-14, IV-1, JavaScript-2, Job-30, JSFL-8, Links-2, Linux-3, Maps-1, Math-8, Money-16, music-1, MXML-1, Open Source-16, Optimization-4, parenting-3, Patterns-2, Personalities-27, Philosophy-4, Politics-1, posters-1, Preloading-3, Productivity-10, PureMVC-11, Pv3d-1, Rafpug-5, Red5-3, Remoting-11, Resources-21, Ruby-6, SAAS-1, Security-11, SEO-9, Silverlight-7, Sound-3, sport-4, Strategy-122, Tamarin-2, Tools-113, Training-3, Trash-8, URAFPUG-14, Urgent-1, Usability-6, Video-6, VoIP-7, Wallop-1, Wishlist-3, XML-1, Архив всех записей (большой)

За последние месяцы:

Ноя 2008: Ноябрьская встреча RAFPUG 12 — для креативных, В продолжение темы флэш-блогов, весь Ноя

Окт 2008: Ура — вторая лицензия Alternativa3D уезжает в Киев!, Влещь на глагне III IIIIIII?, весь Окт

Сен 2008: Встречайте Open Source Flash Media Server — Mammoth, Срочно нужен толковый Flex-разработчик в Харькове (+Java), весь Сен

Авг 2008: Flex Gangsta Rap Video WTF Bro?, 27 сентября — встреча UAFPUG во Львове и плюшки от Adobe, весь Авг

Июл 2008: Тенденции среди работодателей: Adobe Flex, Adobe AIR, Silverlight, Спорт спасет красоту, которая спасет мир!, весь Июл

Июн 2008: Попытка предварительных выводов о встрече аниматоров, Онлайн трансляция встречи аниматоров в Донецке, весь Июн





Примечания:
Статус документа
: в процессе
   2002-2007 Производство: Рост Прибыли · О проекте · Подписка на новости (RSS)