为什么Flex的ArrayCollection的Contain方法会查看内存引用?

时间:2008-12-23 19:36:19

标签: flex programming-languages arraycollection

在Flex中的.contains()上使用ArrayCollection时,它始终会查看内存引用。它似乎没有查看.equals()方法或.toString()方法或任何可覆盖的方法。相反,我需要每次循环ArrayCollection并检查每个项目,直到找到我正在寻找的内容。

有谁知道为什么Flex / ActionScript是这样制作的?为什么不提供一种方式让人们按照他们想要的方式使用contains()方法?

4 个答案:

答案 0 :(得分:2)

难道你不能只扩展ArrayCollection并覆盖contains()方法吗?或者,您可以将ArrayCollection的源粘贴到项目的“mx / collections”包中并修改源代码;这种“猴子修补技术”将覆盖整个项目的行为。但是,我会非常谨慎地以这种方式更改ArrayCollection:因为它在Flex API中的所有位置都使用,所以很有可能你会开始破坏框架中的其他组件。

答案 1 :(得分:2)

contains()方法按引用搜索,更正(我甚至相信基元),所以如果你试图在ArrayCollection中找到一个字符串或一个int,你将不得不自己进行搜索。循环或搜索的变化。我认为我们中的任何人都不会告诉你为什么没有,比方说,该方法上的可选参数指示是否通过ref或val进行搜索;正如他们所说的那样。

但是我肯定会警告你不要修补框架代码 - 这只是在惹麻烦。 :)

答案 2 :(得分:2)

好吧,似乎ArrayCollection实际上并不直接看内存,而只是作为最后的手段。它将尝试为对象找到唯一ID(UID)。如果UID不存在,它将使用UIDUtil.as为它创建一个。

通过让对象实现IUID接口并为对象提供自己的UID,可以绕过这整个默认的UID。 ArrayCollection将查看您提供的UID。

答案 3 :(得分:0)

我建议一个简单的说法:

in_array($haystack, $arrayCollection->toArray());