subset.add(type.cast(behavior)); unfortunately doesn't work because type can be null. See javadoc for type parameter. I guess that can only be changed in 1.5 though a convience method getBehaviors() - without any parameters - already exists.
Juergen On Wed, Apr 15, 2009 at 9:17 AM, Francis De Brabandere <[email protected]> wrote: > subset.add((M)behavior); > > can be replaced by > subset.add(type.cast(behavior)); > > and should help to get rid of that @SuppressWarnings, but then this > might decrease performance (not sure about that) > > On Wed, Apr 15, 2009 at 9:05 AM, Johan Compagner <[email protected]> wrote: >> Ohh wait, i didnt read the email fully, this should work find, i just >> saw the supressed warning.. >> >> But that change would be fine >> >> On 15/04/2009, Johan Compagner <[email protected]> wrote: >>> Hmm dont know about that. >>> Because this would mean that class cast exceptions can easily be get >>> even when from the outside you use generics all the way. >>> How does a user know that the first one is of that type? Maybe we >>> could add our own first our self.. This is just bad code if you ask me >>> >>> On 15/04/2009, Juergen Donnerstag <[email protected]> wrote: >>>> I'll to suggest the following improvement (generics) >>>> >>>> Today: >>>> protected List<IBehavior> getBehvavior(Class<? extends IBehavior> type) >>>> Which leads to code like WindowClosedBehavior behavior = >>>> (WindowClosedBehavior)getBehaviors(WindowClosedBehavior.class).get(0); >>>> Though we provide the type as parameter, we still have to cast the return >>>> value >>>> >>>> That can improved as follows >>>> protected <M extends IBehavior> List<M> getBehaviors(Class<M> type) >>>> which than allows for (no more extra casting) >>>> WindowClosedBehavior behavior = >>>> getBehaviors(WindowClosedBehavior.class).get(0); >>>> >>>> Regarding the implemention nothing changes except for types >>>> �...@suppresswarnings("unchecked") >>>> protected <M extends IBehavior> List<M> getBehaviors(Class<M> type) >>>> { >>>> List<IBehavior> behaviors = getBehaviorsRawList(); >>>> if (behaviors == null) >>>> { >>>> return Collections.emptyList(); >>>> } >>>> >>>> List<M> subset = new ArrayList<M>(behaviors.size()); // avoid >>>> growing >>>> for (Iterator<IBehavior> i = behaviors.iterator(); >>>> i.hasNext();) >>>> { >>>> Object behavior = i.next(); >>>> if (behavior != null && (type == null || >>>> type.isAssignableFrom(behavior.getClass()))) >>>> { >>>> subset.add((M)behavior); >>>> } >>>> } >>>> return Collections.unmodifiableList(subset); >>>> } >>>> >>>> Making that change didn't require any other change to any other Wicket >>>> code incl tests >>>> >>>> Any objections? >>>> >>>> Juergen >>>> >>> >> > > > > -- > http://www.somatik.be > Microsoft gives you windows, Linux gives you the whole house. >
