Hi Igor and others, Great that you tried that out in practice!
On Sat, 07 Jun 2008, Igor Vaynberg wrote: > class component { > public void setmodel(imodel<?> model) {...} > public imodel<?> getmodel(); > } I was earlier trying out this variant: public class Component { public <T> Component setModel(final IModel<T> model) { ... } public IModel<?> getModel() { ... } public Object getModelObject() { ... } public <T> Component setModelObject(final T object) { ... } } and as far as I can tell, this does not inhibit the same problem with generified subclasses. E.g. this works public class ListItem<T> extends WebMarkupContainer { @SuppressWarnings({"unchecked"}) @Override public IModel<T> getModel() { return (IModel<T>) super.getModel(); } @Override public <T> ListItem setModel(IModel<T> model) { return (ListItem) super.setModel(model); } @SuppressWarnings({"unchecked"}) @Override public T getModelObject() { return (T) super.getModelObject(); } @Override public <T> Component setModelObject(T object) { return super.setModelObject(object); } ... } The unchecked cast warning when casting Object to T in getModelObject() is a bummer, but then again I didn't even think that getModelObject() would be overriden in the generified subclasses (I don't consider needing to do Foo foo = (Foo) getModelObject() a problem). The same goes for getModel(). > i would almost reconsider 1.4 and its scope and opt to include a model > decoupling (however and if that is possible) refactor in it. otherwise > i fear we will break the whole generics model again in 1.5 and users > will have to relearn how to use them with wicket. Model decoupling would mean removing the default IModel of Component, that was discussed this week, right? It seems like a great idea [1] on the longer run, but as far as I understand, the idea was to - drop 1.3 support when 1.4 comes out - offer 1.4 as a drop-in replacement (except for Java 5 requirement) for 1.3 users - leave API breaks for 1.5 ...and I don't see how the decoupling could happen without a big API break. So then it would effectively mean continuing Wicket 1.3 (and Java 1.4) support for longer? > so as far as i can see, and this is only my opinion, our options are: > > continue 1.4 as it is now with fully typed components > remove component type but make the api ugly ( i will let matej explain ) Matej, please explain :) > attempt to fix 1.4 by decoupling model from component - 1.4 takes a > lot longer and is not a simple "drop-in/upgrade/whatever" Yet another option would be to address this only in 1.5, and drop Component and IModel generics from 1.4 altogether. Best wishes, Timo [1] The Component class has a lot of responsibilities, so removing any of them, such as the default model handling, is a step to the right direction. -- Timo Rantalaiho Reaktor Innovations Oy <URL: http://www.ri.fi/ > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]