Ok. Thank you.
On 9/21/07, Sian January <[EMAIL PROTECTED]> wrote: > > OK, so Harmony's implementation of HashMap requires iterator() to return a > HashMap.Entry (which is not a public class) and the subclass returns an > incompatible type. > > I assume this works on the RI, and I don't think it's unreasonable to want > to extend HashMap so it would probably be good to fix this in Harmony. > However assuming you're talking about line 732 you can't just change > "Entry<?, ?> entry = (Entry<?, ?>) iterator.next()" to "Map.Entry..." > because the code below won't compile properly if you do that. > > If you would like someone to take a look at this in more depth, the best > thing to do would probably be to create a JIRA report with a description > of > the problem and a small failing test case - > http://issues.apache.org/jira/browse/HARMONY. > > > > On 21/09/2007, Rachel Chen <[EMAIL PROTECTED]> wrote: > > > > Hi, Sian > > I am sorry that I didn't make myself clear enough in the first mail. > > When the exception happens here, it says MapEntryImpl is incompatiable > > with > > HashMap.MapEntry > > Because in these clause Entry<?, ?> entry = (Entry<?, ?>) iterator.next > (), > > it returns a MapEntryImpl which can not be assigned to Entry<?,?>. > Since: > > HashMap.Entry extends MapEntry, MapEntry implements Map.Entry > > MapEntryImpl implements Map.Entry > > > > > > On 9/21/07, Sian January <[EMAIL PROTECTED]> wrote: > > > > > > Hi Rachel, > > > > > > Sorry - you mentioned the writeObject method, so I assumed that's > where > > > the > > > exception was being thrown from. Is it actually coming from the > > iterator > > > method? It would be helpful if you could post a stack trace. Even > so, > > I > > > think if we did change the iterator method you might have problems > > > elsewhere > > > in the class, but it's difficult to say without knowing what exactly > the > > > exception is. > > > > > > Thanks, > > > > > > Sian > > > > > > > > > On 21/09/2007, Rachel Chen < [EMAIL PROTECTED]> wrote: > > > > > > > > Hi , Sian > > > > Thank you for your suggestion. But I still don't understand. > > > > Yes, It seems the entries are instances of HashMap.Entry > > > > But I traced the code. Here is how the iterator comes: Iterator<?> > > > > iterator > > > > = entrySet().iterator(); > > > > public Set<Map.Entry<K, V>> entrySet() { > > > > return new HashMapEntrySet<K, V>(this); > > > > } > > > > public Iterator<Map.Entry<KT, VT>> iterator() { > > > > return new HashMapIterator<Map.Entry <KT, VT>, KT, VT>( > > > > new MapEntry.Type<Map.Entry<KT, VT>, KT, VT>() { > > > > public Map.Entry<KT, VT> get(MapEntry<KT, VT> > > > > entry) > > > > { > > > > return entry; > > > > } > > > > }, associatedMap); > > > > } > > > > So I don't know why it is necessary to use Entry<?, ?> entry = > > (Entry<?, > > > > ?>) > > > > iterator.next(),why can not Map.Entry<?,?> > > > > Thanks. > > > > > > > > On 9/21/07, Sian January <[EMAIL PROTECTED] > wrote: > > > > > > > > > > Hi Rachel, > > > > > > > > > > From looking at HashMap it looks it depends on the fact that the > > > entries > > > > > are > > > > > instances of HashMap.Entry (i.e. by using the 'next' field), so > it's > > > not > > > > > just as simple as changing the type to be Map.Entry. It would > > require > > > > > quite > > > > > a lot of changes to HashMap so I think it might be easier to fix > in > > > > > common-chain (e.g. by overriding the writeObject method), unless > > > anyone > > > > > thinks that HashMap is designed to be extended in this way, in > which > > > > case > > > > > we > > > > > should fix it in Harmony. > > > > > > > > > > Thanks, > > > > > > > > > > Sian > > > > > > > > > > > > > > > On 21/09/2007, Rachel Chen < [EMAIL PROTECTED]> wrote: > > > > > > > > > > > > Hello, > > > > > > I got a exception when I run test common-chain which is also a > > > project > > > > > > under > > > > > > ASF. > > > > > > I found out that is how it happens: We have a interface > > Map.Entryand > > > > > > Class > > > > > > MapEntry implements Map.Entry and a inner class of HashMap > called > > > > Entry > > > > > > extends MapEntry. Here comes the problem: a class in > common-chain > > > > called > > > > > > ContextBase extends HashMap and one of its inner classes > > > > > > MapEntryImpl implement Map.Entry. When ContextBase call a method > > > > > > writeObject in HashMap which has such a clause Entry<?, ?> entry > = > > > > > > (Entry<?, > > > > > > ?>) iterator.next(), stream goes back to ContextBase and returns > > > like > > > > > this > > > > > > Map.Entry entry= ContextBase.this.entry(keys.next())(this one is > a > > > > > > MapEntryImpl). > > > > > > To fix this bug, Can I just simply modify Entry<?, ?> entry = > > > > (Entry<?, > > > > > > ?>) > > > > > > iterator.next() to Map.Entry<?,?>=(Map.Entry<?, ?>) > iterator.next > > () > > > ? > > > > > > Any comments and suggestion? Thank you. > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > Unless stated otherwise above: > > > > > IBM United Kingdom Limited - Registered in England and Wales with > > > number > > > > > 741598. > > > > > Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire > > PO6 > > > > 3AU > > > > > > > > > > > > > > > > > > > > > -- > > > Unless stated otherwise above: > > > IBM United Kingdom Limited - Registered in England and Wales with > number > > > 741598. > > > Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 > > 3AU > > > > > > > > > -- > Unless stated otherwise above: > IBM United Kingdom Limited - Registered in England and Wales with number > 741598. > Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU >
