I would all be easier if getModel() and getModelObject() weren't final. (I know there's a reason why they are, I'm not questioning it).
Then in your component subclass you coud do IModel<Integer> getModel() { return (IModel<Integer>)super.getModel() }, similiar with getmodelobject so you wouldn't have casts all over places and it would be safer too). -Matej On Thu, May 22, 2008 at 9:39 AM, Johan Compagner <[EMAIL PROTECTED]> wrote: > It isnt all or nothing.. i never said that > > I just say if you dont want Component but you do want IModel > then you will get a warning at getModel() > we as a framework shouldnt hide the warning at that call. > > But i am also curious how many people get really the model back from a > component (not counting specific places like repeaters.onpopuplate) > > because i think most people do component.getModelObject() which then needs a > cast > > But i like that extra helper method way more then having an extra > getUnsafeModel() method.. > because thats explicit a developer has to really choose for it. > > i think there are 3 options > > 1> keep it what we have now, tweak it with the feedback we get from 1.4M2 > 2> drop it on Component only and have a class like you described above to do > this: IModel<String> model = Unsafe.cast(component.getModel()); (its still > a hack and a sense of false security but ok. if people really want this..) > 3> drop it on Component and Model > > > i am +1 on 1 > and -0 on 2 and 3 > > I still think it is not bad. and you can come around it really easy by just > creating a few extra classes like > > StringLabel > NumberLabel > StringTextField > NumberTextField > > if you only have a few of those extra all your code is cleanup > > johan > > On Thu, May 22, 2008 at 9:12 AM, Joni Freeman <[EMAIL PROTECTED]> wrote: > >> Yeah, it could even be in its separate utility class: >> >> interface IModel<T> {} >> >> class Component { >> private IModel<?> model; >> >> public IModel<?> getModel() { >> return model; >> } >> } >> >> public class Unsafe { >> public static <T> IModel<T> cast(IModel<?> model) { >> return (IModel<T>) model; >> } >> } >> >> class MyComp extends Component { >> public MyComp() { >> IModel<Integer> model = Unsafe.cast(getModel()); >> } >> } >> >> I'm merely pointing out that there exists a solution to do unsafe cast >> without getting compiler warning. Just like normal casts are handled. >> >> I don't think Johan's all or nothing proposition is very pragmatic one. >> Without generic IModel we do not get any API discoverability and our >> APIs continue to suck. For instance, how can API user know what kind of >> model this needs: MyJuicyComponent(String id, IModel model). At one >> point we did this: MyJuicyComponent(String id, IModel/*<Chocolate>*/ >> model) but this convention is far from optimal. To be sure, one needs to >> browse the sources... >> >> Joni >> >> On Wed, 2008-05-21 at 22:19 +0200, Matej Knopp wrote: >> > Well, maybe it really is a hack that's too ugly. We might have two >> methods, >> > >> > default getModel() that doesn't cast it and alternative convenience >> > one that does. >> > >> > -Matej >> > >> > On Wed, May 21, 2008 at 10:10 PM, Matej Knopp <[EMAIL PROTECTED]> >> wrote: >> > > class Component { >> > > private IModel<?> model; >> > > >> > > public <T> IModel<T> getModel() { >> > > return (IModel<T>) model; >> > > } >> > > } >> > > >> > > I like this. Even with the possible class cast exception. Because >> > > without generics, it doesn't leave you no other option than to cast it >> > > to your model, which isn't much better either, as you get the same >> > > result except that it looks uglier. >> > > >> > > -Matej >> > > >> > > On Wed, May 21, 2008 at 10:07 PM, Johan Compagner < >> [EMAIL PROTECTED]> wrote: >> > >> no i am really against that falls <V> IModel<V> getModel() method >> > >> that really abuses everything that generics stands for. For such a >> basic >> > >> thing. >> > >> this is really bad programming >> > >> If we drop it we also pretty much drop it from IModel or have warnings >> in >> > >> the user code. >> > >> >> > >> But then drop it completely is better because then we have to do a >> cast and >> > >> you really think about that >> > >> Not having that fake assurance.. >> > >> >> > >> johan >> > >> >> > >> >> > >> On Wed, May 21, 2008 at 9:53 PM, Martijn Dashorst < >> > >> [EMAIL PROTECTED]> wrote: >> > >> >> > >>> Before we do a vote I want to make sure what our alternatives are. >> > >>> >> > >>> I still like Joni's alternative. I don't think they are an >> > >>> abomination, because the /potential/ class cast exception you get is >> > >>> the same as with current 1.3. But the benefit of documenting the >> model >> > >>> parameters in DDC, LV, etc. is HUGE. >> > >>> >> > >>> I really appreciate the time and effort that went into implementing >> > >>> the generification. But I also see what kind of mess this brought and >> > >>> I really don't like the Component generification part. >> > >>> >> > >>> Martijn >> > >>> >> > >>> On Wed, May 21, 2008 at 9:24 PM, Igor Vaynberg < >> [EMAIL PROTECTED]> >> > >>> wrote: >> > >>> > ok so we pretty much have some core people wanting to back out the >> > >>> > generics support. >> > >>> > >> > >>> > shall we start a vote? johan, gerolf and i have spent a ridiculous >> > >>> > amount of time trying to generify the codebase and remove all the >> > >>> > shitty warnings. if there is even a slight chance of this getting >> > >>> > backed out i do not want to spend any more time on this until the >> > >>> > issue is resolved. >> > >>> > >> > >>> > also we should halt m2 until this is resolved. >> > >>> > >> > >>> > personally i do not mind backing out generics, they turned out to >> be >> > >>> > quiet a disappointment for me as well, but my feelings about this >> are >> > >>> > not strong. >> > >>> > >> > >>> > we can still use generics such as setresponsepage(class<? extends >> > >>> > page>) to gain bits of typesafety here and there, but if we remove >> > >>> > them from component we obviously have to remove them from imodel. >> > >>> > >> > >>> > so lets start a vote with a parallel discussion thread just for >> this. >> > >>> > >> > >>> > -igor >> > >>> > >> > >>> > On Wed, May 21, 2008 at 8:19 AM, Martijn Dashorst >> > >>> > <[EMAIL PROTECTED]> wrote: >> > >>> >> On Wed, May 21, 2008 at 5:05 PM, Johan Compagner < >> [EMAIL PROTECTED]> >> > >>> wrote: >> > >>> >>> Generics is type safety >> > >>> >> >> > >>> >> I didn't say generics isn't type safety. But APPLYING generics for >> the >> > >>> >> Wicket framework API *ISN'T* its primary goal. API clarity *IS*. >> Less >> > >>> >> questions on the mailing list regarding DDC, ListView, etc. is the >> > >>> >> main goal for applying generics in Wicket. >> > >>> >> >> > >>> >>> I am against this abuse big time -1000 from me >> > >>> >> >> > >>> >> I'm -1000000000000000^1000000000000 for abusing my eyes and brain >> in >> > >>> >> the way it currently is implemented in Wicket. It is completely >> and >> > >>> >> utterly unusable for beginners. There is no way this is going to >> make >> > >>> >> the number of questions on the mailinglist less (other than by >> scaring >> > >>> >> away anyone that wants to actually use the framework) >> > >>> >> >> > >>> >> Martijn >> > >>> >> >> > >>> >> >> --------------------------------------------------------------------- >> > >>> >> 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] >> > >>> > >> > >>> > >> > >>> >> > >>> >> > >>> >> > >>> -- >> > >>> Buy Wicket in Action: http://manning.com/dashorst >> > >>> Apache Wicket 1.3.3 is released >> > >>> Get it now: http://www.apache.org/dyn/closer.cgi/wicket/1.3.3 >> > >>> >> > >>> --------------------------------------------------------------------- >> > >>> 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] >> > >> >> >> --------------------------------------------------------------------- >> 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]