При реализации в AS3 подобия иерархии классов коллекций Java натолкнулся на интересную проблему:
// Set.as
package ru.majus.util
{
public interface Set
{
function put(o:*):Boolean;
function contains(o:*):Boolean;
function remove(o:*):void;
function size():uint;
function isEmpty():Boolean;
function clear():void;
}
}
package ru.majus.util
{
public interface Set
{
function put(o:*):Boolean;
function contains(o:*):Boolean;
function remove(o:*):void;
function size():uint;
function isEmpty():Boolean;
function clear():void;
}
}
// LinkedSet.as
package ru.majus.util
{
public class LinkedSet implements Set
{
// ...
private var _head:Item;
private var _tail:Item;
}
}
class Item {
// ...
}
package ru.majus.util
{
public class LinkedSet implements Set
{
// ...
private var _head:Item;
private var _tail:Item;
}
}
class Item {
// ...
}
При попытке компиляции выдавало веер ошибок (по одной на каждый реализованный метод):
1044: Interface method size in namespace ru.majus.util:Set not implemented by class ru.majus.util:LinkedSet.
Оказалось, проблема глобальная. Это баг в Flash CS4.
Решается переносом класса Item в отдельный файл. На форумах различных библиотек на AS3 уже появились сообщения о невозможности их использования на CS4.
