Re: CIAO, How can I sort an ArrayList<K> of Generic Types ?
Giordano wrote:
On 21 Mag, 17:02, Vivien Barousse <barousse.viv...@gmail.com> wrote:
Collections.sort is expecting a List containing objects implementing the
Comparable interface.
Did your K class implements Comparable ?
Thanks Vivien.. the K isn't a class, but the way to indicate a generic
type (so K could be an Integer, a String or any class you are using at
the moment).
That only works inside a generic definition that uses K as a type parameter.
Why don't you work up an SSCCE
http://sscce.org/
to show us the context in which you are attempting this.
However, at the end of the facts, in my case the K is always
equivalent to a String, so i decide to implement(?).. re-write
everything using the type String (I think that i could write a
comparator class that accept the generic K and then switch into the
right compare() method in the case this K were an Integer, a
Character, a String, etc.. etc...)
switch inside a class to handle type resolution is an antipattern.
Inheritance and polymorphism are the way to do that, not explicit type casts.
You need something like
public class Foo <T extends Comparable <? super T>>
{
private List <T> stuff = new ArrayList <T> ();
public List <T> getStuff()
{
return stuff;
}
public void sort()
{
Collections.sort( stuff );
}
}
(Add the right imports to turn the above into an SSCCE.)
Then client code can do things like:
Foo <Integer> foo = new Foo <Integer> ();
List <Integer> stuff = foo.getStuff();
addItemsTo( stuff );
foo.sort();
You might have noticed that this adds nothing that List doesn't already have:
List <Integer> stuff = new ArrayList <Integer> ();
addItemsTo( stuff );
Collections.sort( stuff );
In other words, List /already is/ how you can sort an array of generic type.
\--
Lew