2013-07-29 1 views
5

オブジェクト私はそれをチェックしましたtempMapObjectsArray私はそれを並べ替えたいArrayListを使用してCollections.sort(tempMapObjectsArray)(または、私はそれを並べ替えるとArrayListと思われますそれはCollections.sort()がそのソートされた重要ではない) 。Javaインタフェース経由Collection.Sortは、私はそれぞれ3つのまたは4つの具体的なものをスーパークラス化し、フォームの抽象クラスの数を持っている

それは(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>) 

私がTypeOfMapObjectクラスのジェネリック間違っを定義していているようですが、これは私が実際にジェネリックを使用していると、それはだ初めてです私は単純に物事を多かれ少なかれランダムに試みている段階に達しました。私はtutorialを通して読んでいるが、これまでのところ、私が間違っていることを単に「クリック」していない。

EDIT:様々な抽象クラスのサブクラスのそれぞれがお互いに匹敵する必要があります - ので、私は抽象クラスTypeofMapObject1TypeOfMapObject2などを持っている場合は、その後、私はのサブクラスに1のサブクラスを比較できるようにする必要がありますクラス2.

+0

"It's throwing up ..."と言うと、上記のスニペットがコンパイルされ、実行時に例外が発生するということですか? –

+0

いいえ、わかりません。そのコンパイル時エラーです。 – MrB

答えて

10

マッチ匹敵するタイプ:

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

それとも単にあなたの抽象クラスにcompareToメソッドを定義していない - 実装するサブクラスのためにそれを残します。質問への編集に対処するために


あなたが異なるサブタイプを比較したい場合は、それらは、彼らが比較されることができるとの値を(文字列を言う)を返すメソッドを実装しています。たとえば:

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(); 
} 

compareValue()から返される型はcompareable何でも、例えば整数、日付、何でもすることができます。

+0

が不明瞭であることを反映するように編集 - 別々の 'TypeOfMapOject'を互いに比較できるようにする必要があります。そのため、複数のタイプの抽象クラスのすべてをお互いに匹敵する必要があります。これを反映する編集された質問。 – MrB

+0

答えの末尾にある編集を試してください – Bohemian

+0

Genius!私はジェネリックスにつきましたが、他のオプションは見ていませんでした。ありがとうございました。 – MrB