I agree. It is very sensible to be able to provide a Model<List<Integer>> as the choices for a dropdown that has Model<Number>. Restricting the choices to Model<List<T>> only eliminates (sensible) options for the client code.
Scott On Wed, Mar 4, 2009 at 8:08 AM, Johannes Schneider <[email protected]> wrote: > On Wed, 2009-03-04 at 10:04 -0500, Brill Pappin wrote: >> I actually wasn't saying they were the same. >> What I said (meant) was that: >> >> a) don't lock down > > Locking down means *removing* the wildcard. Adding the wildcard *widens* > the collection. > > To be clear: > Wildcard --> it fits for everybody > No wildcard --> it fits only for some special cases (maybe yours) > >> b) I prefer the explicit form rather than the "Any of type" form. i.e. >> <List<T>> rather than <List<? extends T>>. > > They mean something completely different. I understand that you prefer > the shorter version. Many do. But it stays wrong... > > If the constructor accepts "List<Number>", everybody *has* to give you > exactly a List<Number>. > > List<Number> n = new List<Number>; > > > If the constructor accepts the widened type, you can add all those > lists... > > List<? extends Number> n = new List<Number>; > List<? extends Number> n = new List<Integer>; > List<? extends Number> n = new List<Double>; > > > If you don't believe me, take a look at GlazedLists. Compare version 1.7 > and version 1.8. They changed exactly that thing (a non backward > compatible change!). They made exactly the same fault... > > > Regards, > > Johannes > - Show quoted text - >> >> - Brill >> >> On 4-Mar-09, at 6:26 AM, Johannes Schneider wrote: >> >> > On Tue, 2009-03-03 at 16:02 -0500, Brill Pappin wrote: >> >> I'd hate to be >> >> prevented from doing so simply because someone wanted to lock down an >> >> API that didn't really need locking down. >> > >> > You are wrong. *Widening* a collection is the exact opposite of >> > "locking >> > down". >> > If you want to have some fancy (read "hacky") write access to the >> > model >> > you are free to simply cast... >> > That is the right choice here. You know that you have a special >> > model in >> > there, so cast it. >> > >> > But the "common" case is, that you don't know for sure whether the >> > model >> > supports adding of choices or not. >> > >> > >> > If you don't believe me, take a look at JComboBox. >> > javax.swing.JComboBox#getModel returns a *read only* view of the >> > model. >> > >> > >> > >> > Regards, >> > >> > Johannes >> > >> > >> >> I think the syntax doesn't really mean read only, and if the wicket >> >> developers really want it to be read only, wrapping the list would be >> >> the way to go. >> >> >> >> I'm for the plain old <List<T>> because its simple and explicit... >> >> <List<? extends T>> would be my next choice because it widens the >> >> scope. >> >> >> >> - Brill >> >> >> >> On 2-Mar-09, at 3:44 PM, James Carman wrote: >> >> >> >>> Aren't both the "choices" model in DDC and the actual model of >> >>> ListView supposed to be considered read-only (as far as the >> >>> component >> >>> is concerned)? The DDC and ListView don't need to be able to alter >> >>> those models anyway, right? Perhaps my experience is just too >> >>> limited, but I don't think I've ever tried to do either one of your >> >>> usecases (I always consider them read-only). >> >>> >> >>> >> >>> On Mon, Mar 2, 2009 at 3:24 PM, Igor Vaynberg >> >>> <[email protected]> wrote: >> >>>> see WICKET-2126 >> >>>> >> >>>> -igor >> >>>> >> >>>> On Mon, Mar 2, 2009 at 12:19 PM, James Carman >> >>>> <[email protected]> wrote: >> >>>>> I vote -0.99 on this (non-binding of course). I'd vote +1 to >> >>>>> making >> >>>>> ListView accept List<? extends T> rather than making DDC less >> >>>>> flexible. >> >>>>> >> >>>>> On Mon, Mar 2, 2009 at 3:11 PM, Brill Pappin <[email protected]> >> >>>>> wrote: >> >>>>>> Ok, as suggested, here is the thread, and the first vote. >> >>>>>> >> >>>>>> +1 >> >>>>>> for making the generic definition the same for all list type >> >>>>>> components. >> >>>>>> >> >>>>>> FYI - you can also "vote" in the issue I just created at (which >> >>>>>> might >> >>>>>> actually be a better place to vote): >> >>>>>> https://issues.apache.org/jira/browse/WICKET-2137 >> >>>>>> >> >>>>>> - Brill >> >>>>>> >> >>>>>> >> >>>>>> >> >>>>>> >> >>>>>> On 28-Feb-09, at 5:18 PM, Jeremy Thomerson wrote: >> >>>>>> >> >>>>>>> Perhaps start a vote thread, with the subject something like: >> >>>>>>> "VOTE: >> >>>>>>> Remove >> >>>>>>> ? extends from constructor of DropDownChoice". >> >>>>>>> >> >>>>>>> I'd be +1 non-binding >> >>>>>>> >> >>>>>>> >> >>>>>>> -- >> >>>>>>> Jeremy Thomerson >> >>>>>>> http://www.wickettraining.com >> >>>>>>> >> >>>>>>> >> >>>>>>> On Sat, Feb 28, 2009 at 3:33 PM, Brill Pappin <[email protected]> >> >>>>>>> wrote: >> >>>>>>> >> >>>>>>>> I'm of the don't widen it camp anyway :) >> >>>>>>>> >> >>>>>>>> So how do I go about gathering support for having the >> >>>>>>>> DropDownChoice work >> >>>>>>>> with the models the way everything else does? >> >>>>>>>> >> >>>>>>>> - Brill >> >>>>>>>> >> >>>>>>>> >> >>>>>>>> On 28-Feb-09, at 1:42 AM, Igor Vaynberg wrote: >> >>>>>>>> >> >>>>>>>> yes, the choice was intentional. personally i do not care if it >> >>>>>>>> is <T> >> >>>>>>>>> >> >>>>>>>>> all the way, some users complained so we widened it on the >> >>>>>>>>> choices >> >>>>>>>>> model, we cannot widen it on the main model. >> >>>>>>>>> >> >>>>>>>>> -igor >> >>>>>>>>> >> >>>>>>>>> On Fri, Feb 27, 2009 at 8:51 PM, Brill Pappin >> >>>>>>>>> <[email protected]> wrote: >> >>>>>>>>> >> >>>>>>>>>> I see... but this would i think because Bar "is a" Foo: >> >>>>>>>>>> >> >>>>>>>>>> class Bar exends Foo {} >> >>>>>>>>>> List<? extends Foo> list = ... >> >>>>>>>>>> list.add(new Bar()); >> >>>>>>>>>> >> >>>>>>>>>> Anyway, what your saying is that the generics choice was >> >>>>>>>>>> intentional? >> >>>>>>>>>> >> >>>>>>>>>> - Brill >> >>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>>>> On 27-Feb-09, at 3:19 PM, Igor Vaynberg wrote: >> >>>>>>>>>> >> >>>>>>>>>> list<? extends string> stings=... >> >>>>>>>>>>> >> >>>>>>>>>>> strings.add("asd"); <== wont compile >> >>>>>>>>>>> >> >>>>>>>>>>> -igor >> >>>>>>>>>>> >> >>>>>>>>>>> On Fri, Feb 27, 2009 at 11:13 AM, Adriano dos Santos >> >>>>>>>>>>> Fernandes >> >>>>>>>>>>> <[email protected]> wrote: >> >>>>>>>>>>> >> >>>>>>>>>>>> >> >>>>>>>>>>>> What do you mean with "read only" here? >> >>>>>>>>>>>> >> >>>>>>>>>>>> >> >>>>>>>>>>>> Adriano >> >>>>>>>>>>>> >> >>>>>>>>>>>> >> >>>>>>>>>>>> Igor Vaynberg escreveu: >> >>>>>>>>>>>> >> >>>>>>>>>>>>> >> >>>>>>>>>>>>> <? extends Foo> collections are read only, it would be too >> >>>>>>>>>>>>> inconvenient to make the model collection read only :) >> >>>>>>>>>>>>> >> >>>>>>>>>>>>> -igor >> >>>>>>>>>>>>> >> >>>>>>>>>>>>> On Thu, Feb 26, 2009 at 8:34 PM, Jeremy Thomerson >> >>>>>>>>>>>>> <[email protected]> wrote: >> >>>>>>>>>>>>> >> >>>>>>>>>>>>> >> >>>>>>>>>>>>>> This is what I was commenting on last week on the list >> >>>>>>>>>>>>>> (or earlier >> >>>>>>>>>>>>>> this >> >>>>>>>>>>>>>> week). One expects List<? extends Foo> while the other >> >>>>>>>>>>>>>> expects >> >>>>>>>>>>>>>> List<Foo>. >> >>>>>>>>>>>>>> I'm not fully convinced yet that the "? extends" is the >> >>>>>>>>>>>>>> better >> >>>>>>>>>>>>>> option. >> >>>>>>>>>>>>>> Either way, I think they should be the same. >> >>>>>>>>>>>>>> >> >>>>>>>>>>>>>> -- >> >>>>>>>>>>>>>> Jeremy Thomerson >> >>>>>>>>>>>>>> http://www.wickettraining.com >> >>>>>>>>>>>>>> >> >>>>>>>>>>>>>> On Thu, Feb 26, 2009 at 8:27 PM, Brill Pappin <[email protected] >> >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>> wrote: >> >>>>>>>>>>>>>> >> >>>>>>>>>>>>>> >> >>>>>>>>>>>>>> >> >>>>>>>>>>>>>>> Roughly what I'm doing is: >> >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>> class TypeA{} >> >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>> class TypeAModel extends LoadableDetachableModel< >> >>>>>>>>>>>>>>> List<TypeA>> { >> >>>>>>>>>>>>>>> public List<TypeA> load(){ >> >>>>>>>>>>>>>>> ... do the load ... >> >>>>>>>>>>>>>>> return ... >> >>>>>>>>>>>>>>> } >> >>>>>>>>>>>>>>> } >> >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>> TypeAModel model = new TypeAModel(); >> >>>>>>>>>>>>>>> DropDownChoice< TypeA> ddc = new >> >>>>>>>>>>>>>>> DropDownChoice<TypeA>("id", model >> >>>>>>>>>>>>>>> ); >> >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>> which gets complained about... in this case the generic >> >>>>>>>>>>>>>>> def is >> >>>>>>>>>>>>>>> DropDownChoice<List<? extends T>> >> >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>> I think the problem is that the generic def of the class >> >>>>>>>>>>>>>>> should >> >>>>>>>>>>>>>>> actually >> >>>>>>>>>>>>>>> be >> >>>>>>>>>>>>>>> DropDownChoice<List<T>> because you are already >> >>>>>>>>>>>>>>> identifying the >> >>>>>>>>>>>>>>> type >> >>>>>>>>>>>>>>> when >> >>>>>>>>>>>>>>> you create a new instance. >> >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>> Now... my generics are a bit hazy at this level, because >> >>>>>>>>>>>>>>> I can >> >>>>>>>>>>>>>>> understand >> >>>>>>>>>>>>>>> why it was done that way... does anyone with more >> >>>>>>>>>>>>>>> generics >> >>>>>>>>>>>>>>> experience >> >>>>>>>>>>>>>>> know >> >>>>>>>>>>>>>>> what it should be? Is this a bug that needs filing? >> >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>> - Brill >> >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>> On 26-Feb-09, at 6:03 PM, Kaspar Fischer wrote: >> >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>> On 26.02.2009, at 22:52, Brill Pappin wrote: >> >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> For some reason the DropDownChoice component doesn't >> >>>>>>>>>>>>>>>> have the >> >>>>>>>>>>>>>>>> same >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>> generics as ListView and it will not accept a model >> >>>>>>>>>>>>>>>>> that >> >>>>>>>>>>>>>>>>> listview >> >>>>>>>>>>>>>>>>> will, >> >>>>>>>>>>>>>>>>> despite its saying that it will accept an IModel. >> >>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>> Is anyone else having that sort of trouble with >> >>>>>>>>>>>>>>>>> DropDownChoice? >> >>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>> - Brill >> >>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> Can you give us more information on what exactly is not >> >>>>>>>>>>>>>>>> working >> >>>>>>>>>>>>>>>> for >> >>>>>>>>>>>>>>>> you? >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> DropDownChoice indeed does accept a model, see for >> >>>>>>>>>>>>>>>> instance the >> >>>>>>>>>>>>>>>> example >> >>>>>>>>>>>>>>>> in >> >>>>>>>>>>>>>>>> the class description at >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> http://wicket.apache.org/docs/1.4/org/apache/wicket/markup/html/form/DropDownChoice.html >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> This works for me. >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> Kaspar >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> -- >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> <!-- HTML: --> >> >>>>>>>>>>>>>>>> <select wicket:id="site"> >> >>>>>>>>>>>>>>>> <option>site 1</option> >> >>>>>>>>>>>>>>>> <option>site 2</option> >> >>>>>>>>>>>>>>>> </select> >> >>>>>>>>>>>>>>>> <ul> >> >>>>>>>>>>>>>>>> <li wicket:id="site2"><wicket:container >> >>>>>>>>>>>>>>>> wicket:id="sitename"/></li> >> >>>>>>>>>>>>>>>> </ul> >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> // Code >> >>>>>>>>>>>>>>>> List SITES = Arrays.asList(new String[] { >> >>>>>>>>>>>>>>>> "The Server Side", "Java Lobby", "Java.Net" >> >>>>>>>>>>>>>>>> }); >> >>>>>>>>>>>>>>>> form.add(new DropDownChoice("site", SITES)); >> >>>>>>>>>>>>>>>> form.add(new ListView("site2", SITES) >> >>>>>>>>>>>>>>>> { >> >>>>>>>>>>>>>>>> @Override >> >>>>>>>>>>>>>>>> protected void populateItem(ListItem item) >> >>>>>>>>>>>>>>>> { >> >>>>>>>>>>>>>>>> item.add(new Label("sitename", item.getModel())); >> >>>>>>>>>>>>>>>> } >> >>>>>>>>>>>>>>>> }); >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> --------------------------------------------------------------------- >> >>>>>>>>>>>>>>>> To unsubscribe, e-mail: [email protected] >> >>>>>>>>>>>>>>>> For additional commands, e-mail: >> >>>>>>>>>>>>>>>> [email protected] >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>> --------------------------------------------------------------------- >> >>>>>>>>>>>>>>> To unsubscribe, e-mail: users- >> >>>>>>>>>>>>>>> [email protected] >> >>>>>>>>>>>>>>> For additional commands, e-mail: [email protected] >> >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>> >> >>>>>>>>>>>>> ? extends >> >>>>>>>>>>>>> >> >>>>>>>>>>>>> >> >>>>>>>>>>>>> --------------------------------------------------------------------- >> >>>>>>>>>>>>> To unsubscribe, e-mail: users- >> >>>>>>>>>>>>> [email protected] >> >>>>>>>>>>>>> For additional commands, e-mail: users- >> >>>>>>>>>>>>> [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: users- >> >>>>>>>>>>> [email protected] >> >>>>>>>>>>> >> >>>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>>>> --------------------------------------------------------------------- >> >>>>>>>>>> To unsubscribe, e-mail: [email protected] >> >>>>>>>>>> For additional commands, e-mail: [email protected] >> >>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>>> es, the choice >> >>>>>>>>> >> >>>>>>>>> --------------------------------------------------------------------- >> >>>>>>>>> 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] >> >>>>> >> >>>>> >> >>>> >> >>>> --------------------------------------------------------------------- >> >>>> 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] >> > >> >> >> --------------------------------------------------------------------- >> 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]
