Ho un certo numero di classi astratte ogni superclassing tre o quattro più concreti e della forma:Java - Collection.Sort oltre Interface Objects
public abstract class TypeOfMapObject extends IrrelevantClass implements Serializable, MapObject, Comparable<MapObject>
{
//irrelevant stuff
@Override
public int compareTo(MapObject m)
{
//specific algorithm for natural ordering
}
}
Altrove nel mio codice ho un ArrayList<MapObject>
(che viene popolata correttamente, l'ho verificato) chiamato tempMapObjectsArray
Voglio ordinare quello ArrayList
usando Collections.sort(tempMapObjectsArray)
(o, piuttosto, voglio ordinare quello ArrayList
e sembra che Collections.sort()
sia il modo migliore per farlo.Il modo specifico ordinato non è importante) .
Non è la compilazione e dando il messaggio (in Netbeans):
no suitable method found for sort(java.util.ArrayList<Model.MapObject>)
method java.util.Collections.<T>sort(java.util.List<T>,java.util.Comparator<? super T>) is not applicable
(cannot instantiate from arguments because actual and formal argument lists differ in length)
method java.util.Collections.<T>sort(java.util.List<T>) is not applicable
(inferred type does not conform to declared bound(s)
inferred: Model.MapObject
bound(s): java.lang.Comparable<? super Model.MapObject>)
Sembra che io sto definendo il torto generica nella classe TypeOfMapObject
, ma questa è la prima volta che ho davvero utilizzato farmaci generici ed è raggiunto il livello in cui sto semplicemente provando le cose più o meno a caso. Sto leggendo lo tutorial ma finora semplicemente non "clicco" quello che sto facendo male.
EDIT: Ognuna delle sottoclassi delle varie classi astratte devono essere comparabili tra di loro - quindi se ho classi astratte TypeofMapObject1
, TypeOfMapObject2
ecc, quindi ho bisogno di essere in grado di confrontare una sottoclasse di 1 ad una sottoclasse di 2.
Quando si dice "Si sta vomitando ..." si intende che lo snippet sopra riportato viene compilato e si ottiene l'eccezione in runtime? –
No, mi dispiace per non essere chiaro. È un errore in fase di compilazione. Modificato per riflettere – MrB