MaxContext.getContext().getAllObjects()


    Feb 25 2006 | 7:19 pm
    hi, I'm still working at deattaching/reattaching to hidden objects
    from mxj. according to the javadoc, getAllObjects() returns a set of
    MaxObjects. however when I go to iterate over the set I get a bunch
    of Map.Entry objects instead, and have to 'unbox' them to get the
    MaxObjects. is this the intended behaviour? if so maybe the javadoc
    should be updated. here's some sample code to demonstrate:
    Set objects = getContext().getAllObjects();
    post(debugString + ": objects: " + objects.toString());
    Iterator objiter = objects.iterator();
    post(debugString + ": searching for x_iter");
    while(objiter.hasNext()) {
    Map.Entry entry = (Map.Entry) objiter.next();
    Object key = entry.getKey();
    Object val = entry.getValue();
    post(debugString + ": key: " + key.toString());
    post(debugString + ": val: " + val.toString());
    if (val instanceof xboxless) {
    post(debugString + ": found: " + ((xboxless)val).getName());
    } else {
    post(debugString + ": found: " + obj.getClass());
    }
    }
    curiously the key and val appear always to be identical, and
    objects.toString() dumps a lot of redundant info because of this (one
    'MaxObject'):
    [boxed[name: 'boxed_1'; 1 in; 1 out]=boxed[name: 'boxed_1'; 1 in; 1
    out], ..]
    presumably this is [key=val, ..]
    this is on max4.5.6 java1.5.0_06 os10.4.5
    best,
    r.

    • Feb 25 2006 | 8:12 pm
      On 06-02-25, at 1519, ritchie wrote:
      > ...
      >
      > this is on max4.5.6 java1.5.0_06 os10.4.5
      >
      and fwiw I just noticed that mxj is v1.0 for java 1.4 so I tested on
      java 1.4.2 and get the same thing.
      r.
    • Feb 26 2006 | 1:42 pm
      it returns a set. that fact that you are using an iterator to iterate
      over your set is why you get Map.Entry objects. This makes sense to
      me. The javadoc states that the method returns a set which it does. I
      guess I don't understand what you are trying to get at. Given that
      objects in a set are untyped you are always going to have to unbox
      them or in java 1.5 use templates or whatever they are called.
      Toph
    • Feb 26 2006 | 2:16 pm
      On 26 Feb 2006, at 14:42, topher lafata wrote:
      > it returns a set. that fact that you are using an iterator to
      > iterate over your set is why you get Map.Entry objects.
      If I were iterating over a Set, I'd expect to be getting E's:
      Set.iterator() returns an Iterator, which delivers E's.
      On the other hand, transforming a Map into a Set will result in a set
      containing pairs of key and value (Set
      >).
      Since the MXJ API is still in the Java 1.4 world, it's not possible
      to tell from the type specs what kind of set getContext
      ().getAllObjects() returns, but the documentation suggests it should
      be Set, rather than anything with map entries.
      -- N.
      nick rothwell -- composition, systems, performance -- http://
      www.cassiel.com
    • Feb 26 2006 | 2:56 pm
      thanks for articulating this better, nick. the behaviour described in
      the javadoc is probably more useful for end-users, however as long as
      the doc and the api are consistent then either way is fine. I'm just
      trying to save others the trouble of figuring out why they might be
      getting classcast exceptions, or never finding that the set objects
      match a given MaxObject subtype via instanceof.
      best,
      r.