2013-07-29 15 views
5

soyut sınıfların bir dizi her superclassing üç veya dört somut olanlar ve form Nesneleri doğru, ben kontrol ettim)) ArrayListCollections.sort(tempMapObjectsArray) kullanarak (ya da daha doğrusu, ArrayList sıralamak istiyorum ve bunu yapmak için en iyi yolu Collections.sort() görünüyor. sıralı şekilde önemli değildir) .Java arayüzü üzerinden Collection.Sort

derlemek ve (Netbeans) mesajı vermiyor:

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

Ben TypeOfMapObject sınıfında jenerik yanlış belirliyor olmamız görünüyor, ama bu gerçekten jenerik kullanılan ilk kez ve bu kadar Ben sadece rastgele daha fazla veya daha az şeyleri denediğim sahneye ulaştım. tutorial'u okuyorum ama şu ana kadar yanlış yaptığım şeyi "tıklamak" değil.

DÜZENLEME: - soyut sınıfları varsa çok TypeofMapObject1, TypeOfMapObject2 vb, sonra bir alt sınıfı, 1 ila bir alt sınıfı karşılaştırma yapabilmek için gereken çeşitli özet sınıflarının alt sınıfların her birbirine benzer olması gerekir sınıf ile 2.

+0

"Şunu fırlatıyor ..." derken, yukarıdaki kod parçasının derlendiğini ve çalışma zamanındaki istisnayı aldığınızı mı kastediyorsunuz? –

+0

Hayır, belirsiz olduğu için özür dilerim. Onun bir derleme zamanı hatası. Belirsiz olduğu için – MrB

cevap

10

Maç Karşılaştırılabilir tipi:

public abstract class TypeOfMapObject extends IrrelevantClass implements Serializable, MapObject, Comparable<TypeOfMapObject> { 
    @Override 
    public int compareTo(TypeOfMapObject m) 
    { 
     //specific algorithm for natural ordering 
    } 
} 

Veya basitçe soyut sınıfta compareTo yöntemini tanımlamaz - uygulamak için alt sınıf için bırakın.


soruya düzenlemeyi ele almak için:

farklı alt tiplerinin karşılaştırmak istiyorsanız, onları karşılaştırılabilir hangi bir değere (String söylemek) döndüren bir yöntem uygulamak var. Örneğin:

public abstract class TypeOfMapObject extends IrrelevantClass implements Serializable, MapObject, Comparable<TypeOfMapObject> { 
    @Override 
    public int compareTo(TypeOfMapObject m) 
    { 
     return compareValue().compareTo(m.compareValue()); 
    } 

    // subclasses to return their value to compare 
    protected abstract String compareValue(); 
} 

tipi compareable şey, mesela Tamsayı, Tarih, her neyse olabilir compareValue() döndü.

+0

SOrry'yi yansıtacak şekilde düzenlenmiştir - Farklı 'TypeOfMapOject' şeylerini birbiriyle karşılaştırmam gerekiyor - soyut sınıfların çoğunun birbirleriyle karşılaştırılabilir olması gerektiğinden. Bunu yansıtmak için düzenlenmiş soru. – MrB

+0

Yanıtı, – Bohemian

+0

Genius! Jeneriklere asıldım ve diğer seçeneklere bakmadım. Teşekkür ederim. – MrB