Почему uid-getter / setter называется (ArrayCollection)? - PullRequest
1 голос
/ 12 марта 2010

, если написал следующий код и не понимаю, почему трассировка возвращает «ложь»:

функция (с трассировкой):

        import mx.controls.Alert;
        import mx.collections.ArrayCollection;

        public function runTest():void {
            var unique1:MyUniqueObject = new MyUniqueObject();
            unique1.id = 1;

            var unique2:MyUniqueObject = new MyUniqueObject();
            unique2.id = 2;

            var sameUniqueAsUnique1:MyUniqueObject = new MyUniqueObject();
            sameUniqueAsUnique1.id = 1;

            var collection:ArrayCollection = new ArrayCollection();
            collection.addItem(unique1);
            collection.addItem(unique2);

            trace(collection.contains(sameUniqueAsUnique1));
        }

MyUniqueObject-класса:

package
{
    import mx.core.IUID;

    [Bindable]
    public class MyUniqueObject implements IUID
    {
        public var id:int;

        public function get uid():String {
            return "MyUniqueObject." + id;
        }

        public function set uid(uid:String):void {
            //nothing to do here...
        }
    }
}

Есть идеи?

Cowabunga!

1 Ответ

1 голос
/ 12 марта 2010

с чего бы это? реализация использует ==, а на самом деле даже === в вашем случае.

также, методы доступа никогда не называются.

contains является методом ListCollectionView и вызывает следующее:

  1. вызов ListCollectionView::getItemIndex
  2. sort == null && filterFunction == null, таким образом:
  3. IList::getItemIndex

Для ArrayCollection ListCollectionView::list - это ArrayList, реализующий getItemIndex как ArrayUtil.getItemIndex(item, source);, который фактически использует строгое сравнение между элементом и записями исходного массива.

Если вы хотите, чтобы вызов оценивался как true, вам потребуется предоставить собственную реализацию IList. Подклассы ArrayList и переопределение getItemIndex помогут, хотя я не уверен, что это не нарушит некоторые другие функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...