Yes, your suggestion should stop that runtime exception being thrown. A new (or more comprehensive) test for that method could confirm this.
What I described addresses a not totally unrelated but slightly broader concern, and would not impact on any optimisations; it is not more important than fixing a known bug that is disturbing a user. Regards - Cemal http://www.jWeekend.co.uk http://jWeekend.co.uk Matej Knopp-2 wrote: > > The only problem right now is the cast to Component[]. The fix is > easy, just change it to Object[]. The optimization makes a lot of > sense and there is reason why it can't really be simple. > > -Matej > > On Mon, Dec 1, 2008 at 2:29 AM, jWeekend <[EMAIL PROTECTED]> > wrote: >> >> MarkupContainer's children field is declared as an Object and can refer >> to >> >> a ChildList - which is a List, hopefully (until it's genericised) of >> Components, >> an Object[] - again, hopefully of Components, >> a Component - ie a single child, or, even >> a ComponentSourceEntry - a bare-bones representation of only the >> "essentials" of a Component from which it can be reconstructed. >> >> I assume MarkupContainer's implementation was refactored (_from_ >> something >> much more straight-forward) as an optimisation, in particular related to >> serialisation, with the argument probably along the lines of: it is >> common >> for a MarkupContainer to have just a single child, so we don't want the >> luggage of a List in those cases etc ... >> >> All this can make MarkupContainer pretty fragile, easy to accidentally >> break. If the optimisation argument is really strong enough (I expect it >> must have been at the time and may still be), at the very least, all the >> messy operations on "children" could be encapsulated in a class (perhaps >> called FunkyChildren, possibly as an inner class if it necessarily needs >> access to its owning MarkupContainer instance's guts and is never used >> outside this context) that exposes only friendly methods like >> set(int index,Component child) and >> remove(Component child) >> etc ... >> >> Apart from simplifying MarkupContainer, the above design would also have >> the >> benefit of making it possible to address the problem in hand (with the >> illegal runtime array cast), mend what's broken and test this funky, >> edge-case(?) behaviour without having to interfere with MarkupContainer. >> And, if there's a simpler/better/more efficient FunkyChildren possible >> for >> 1.5 just plug in the new implementation. Importantly, as this an internal >> change (internal to MarkupContainer), there will be no API break (neither >> within Wicket nor in the public API). >> >> Regards - Cemal >> http://www.jWeekend.co.uk http://jWeekend.co.uk >> >> >> >> Matej Knopp-2 wrote: >>> >>> this >>> >>> sorted = Arrays.asList((Component[])children); >>> >>> doesn't look right. I think it should have been (Object[])children >>> although a type check would be appropriate. >>> >>> -Matej >>> >>> On Fri, Nov 28, 2008 at 7:30 PM, jWeekend <[EMAIL PROTECTED]> >>> wrote: >>>> >>>> Not quite. >>>> String[] bO = (String[])(new Object[]{"yes","we","can"}); >>>> compiles but fails at run time. >>>> >>>> Regards - Cemal >>>> http://www.jWeekend.co.uk http://jWeekend.co.uk >>>> >>>> >>>> >>>> Valentine2008 wrote: >>>>> >>>>> It will bring the compilation error when trying to cast arrays in >>>>> Java. >>>>> >>>>> So you mean it is a bug in Wicket? >>>>> >>>>> >>>>> Timo Rantalaiho wrote: >>>>>> >>>>>> On Thu, 27 Nov 2008, Valentine2008 wrote: >>>>>>> java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to >>>>>>> [Lorg.apache >>>>>>> .wicket.Component; >>>>>>> at >>>>>>> org.apache.wicket.MarkupContainer.iterator(MarkupContainer.java:478) >>>>>>> ......... >>>>>>> >>>>>>> The code on line 478 of MarkupContainer.java is: >>>>>>> sorted = Arrays.asList((Component[])children); >>>>>>> >>>>>>> Is it a bug of Wicket? >>>>>> >>>>>> No, I think it's a limitation of Java. You cannnot cast >>>>>> arrays. >>>>>> >>>>>> Best wishes, >>>>>> Timo >>>>>> >>>>>> -- >>>>>> Timo Rantalaiho >>>>>> Reaktor Innovations Oy <URL: http://www.ri.fi/ > >>>>>> >>>>>> --------------------------------------------------------------------- >>>>>> To unsubscribe, e-mail: [EMAIL PROTECTED] >>>>>> For additional commands, e-mail: [EMAIL PROTECTED] >>>>>> >>>>>> >>>>>> >>>>> >>>>> >>>> >>>> -- >>>> View this message in context: >>>> http://www.nabble.com/Bug-of-Wicket-1.3.4-when-iterate-the-form-using-iterator%28Comparator%29--tp20723903p20738179.html >>>> Sent from the Wicket - User mailing list archive at Nabble.com. >>>> >>>> >>>> --------------------------------------------------------------------- >>>> To unsubscribe, e-mail: [EMAIL PROTECTED] >>>> For additional commands, e-mail: [EMAIL PROTECTED] >>>> >>>> >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: [EMAIL PROTECTED] >>> For additional commands, e-mail: [EMAIL PROTECTED] >>> >>> >>> >> >> -- >> View this message in context: >> http://www.nabble.com/Bug-of-Wicket-1.3.4-when-iterate-the-form-using-iterator%28Comparator%29--tp20723903p20764684.html >> Sent from the Wicket - User mailing list archive at Nabble.com. >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [EMAIL PROTECTED] >> For additional commands, e-mail: [EMAIL PROTECTED] >> >> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > > -- View this message in context: http://www.nabble.com/Bug-of-Wicket-1.3.4-when-iterate-the-form-using-iterator%28Comparator%29--tp20723903p20774302.html Sent from the Wicket - User mailing list archive at Nabble.com. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]