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
>>
>

Reply via email to