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

Reply via email to