Apache flex Flex:ArrayCollection应为只读

Apache flex Flex:ArrayCollection应为只读,apache-flex,Apache Flex,是否仍要进行阵列收集已准备就绪。。 因此,客户端只能读取数据。。但可以添加或删除项 举个例子会很有帮助 提前感谢此类允许您使用新构造函数使用源数组创建ArrayCollection,但您将无法使用接口方法添加或删除项 package { import mx.collections.ArrayCollection; import mx.collections.IList; public class ArrayCollectionReadOnly extends ArrayCollection {

是否仍要进行阵列收集已准备就绪。。 因此,客户端只能读取数据。。但可以添加或删除项

举个例子会很有帮助


提前感谢

此类允许您使用新构造函数使用源数组创建ArrayCollection,但您将无法使用接口方法添加或删除项

package
{
import mx.collections.ArrayCollection;
import mx.collections.IList;

public class ArrayCollectionReadOnly extends ArrayCollection
{
    public function ArrayCollectionReadOnly(source:Array=null)
    {
        super(source);
    }

    override public function addAll(addList:IList):void {
        throw new Error("Illegal Operation, read only");    
    }

    override public function addAllAt(addList:IList, index:int):void {
        throw new Error("Illegal Operation, read only");    
    }

    override public function addItem(item:Object):void{
        throw new Error("Illegal Operation, read only");    
    }

    override public function addItemAt(item:Object, index:int):void{
        throw new Error("Illegal Operation, read only");    
    }

    override public function removeAll():void {
        throw new Error("Illegal Operation, read only");    
    }

    override public function removeItemAt(index:int):Object {
        throw new Error("Illegal Operation, read only");
        return null;
    }

    override public function setItemAt(item:Object, index:int):Object{
        throw new Error("Illegal Operation, read only");
        return null;
    }
}

}

当我想要限制对内部集合的访问时,我通常只从源元素返回一个新实例

private var _ac:ArrayCollection;

public function get ac():ArrayCollection
{
  return (_ac == null)? null : new ArrayCollection(_ac.toArray().concat());
}

在末尾添加.contact()可确保获得新的源实例,而不是复制现有的源实例。

将其包装到自定义类中,并使包装的ArrayCollection为const/final,我不记得了。提供仅获取方法。在构造函数中初始化ArrayCollection并使其私有。@gokCheng
final
使对象不可重写
const
是一个实例化后无法更改的变量(因此您不能再次调用
new
)。在这种情况下,它们都不能帮助询问者。@JoshJanusch您确定final使“对象”不可重写还是使
方法
不可重写?很长一段时间我都没有以代码的形式编写,所以我谈到了Java的
final
关键字。我认为这可能有助于他进行内部
ArrayCollection
const
,但你是对的,这对解决方案来说并不重要。@gokcheng是的,这正是
final
所做的。看见而使用
const
只能防止变量被重新实例化。它绝对不会阻止某人根据询问者的需要使用对象的方法或属性。@JoshJanusch我怀疑你的第一句话是否正确。他和我谈论的是ArrayCollection
对象
而不是
方法
。当我在FB上尝试时,它甚至不允许我将
final
放在
对象的前面。请注意,如果集合已过滤,则不会在此处包含所有项目,因为您使用的是toArray()。您需要对“source”属性进行concat,才能将所有项放入新集合中。此外,我认为,由于每次要访问时都要实例化一个新的ArrayCollection,因此此实现会更慢it@ChristopheHerreman是的,就是这个主意。。。获取集合的当前表示形式。我明白为什么这可能并不总是可取的,所以谢谢你提出来。(我只能使用一个@)CodeMonkey如果创建单个实例是你的瓶颈,那么你一定是优化之王。对性能的影响可以忽略不计。只是不要做任何愚蠢的事情,比如在循环中引用它或做其他事情。@drkstr1有时候它很重要,尤其是在移动设备上。