2016-03-31 17 views
-2

Intervalに年齢グループの境界が記載されている、年齢グループ化されたセットに人物エンティティを格納するためのTreeMap<Interval, Set<Object>>を生成しようとしました。私はこれをしようとしたときに次のエラーが発生しました。 DateTimeためIntervalを入れ替えるなぜJoda Intervalは匹敵しなかったのですか?

java.lang.ClassCastException: org.joda.time.Interval cannot be cast to java.lang.Comparable 

は完璧に動作しますが、マップのキーは、Intervalを作成するための入力として使用する必要があります。

なぜJoda Intervalは匹敵しませんでしたか?

+1

これは 'comparable 'を実装していないためですか?ここであなたの質問は何ですか? – CollinD

+1

コンパイラを実装した独自のラッパーを書いてください –

+0

ええ、それは技術的な理由ですが、他のクラスの多くが匹敵しているので、私は「なぜ」ではないのですか? – ben3000

答えて

4

間隔はさまざまな方法で比較できます。 Intervalのjavadocは、それを明示的に述べています。

持続時間は、ReadableDurationによって別々に表されます。その結果、間隔は比較できません。 2つの区間の長さを比較するには、区間の長さを比較する必要があります。

また、間隔をReadablePeriodに変換することもできます。もはや説明のために

、以下の間隔を考慮し、彼らが注文する方法を定義します。

10:00 - 12:00 
11:00 - 13:00 
11:00 - 12:00 
9:00 - 10:00 
9:00 - 13:00 

は、彼らは時間(タイムスパン)が発注されるべきか?

11:00 - 12:00 (1 hours) 
9:00 - 10:00 (1 hours) 
10:00 - 12:00 (2 hours) 
11:00 - 13:00 (2 hours) 
9:00 - 13:00 (4 hours) 

開始時刻は?

9:00 - 10:00 
9:00 - 13:00 
10:00 - 12:00 
11:00 - 13:00 
11:00 - 12:00 

開始時間から期間は?

9:00 - 10:00 (1 hours) 
9:00 - 13:00 (4 hours) 
10:00 - 12:00 (2 hours) 
11:00 - 12:00 (1 hours) 
11:00 - 13:00 (2 hours) 

または終了時刻によって、

このインタフェースは、その実装する各クラスのオブジェクトに全体順序付けを強制:あなたが見ることができるように

9:00 - 10:00 (1 hours) 
11:00 - 12:00 (1 hours) 
10:00 - 12:00 (2 hours) 
11:00 - 13:00 (2 hours) 
9:00 - 13:00 (4 hours) 

は、Comparableが定義するものである「自然順序付け」の単一の明確な定義がなく、それ。この順序付けは、クラスナチュラルオーダーと呼ばれ、クラスのcompareToメソッドは、自然比較メソッドと呼ばれます。

+0

ピエール、javadocへの非常にいい言及。私のアドオンが好きだと思っています。 ;-) – Andreas

+0

ありがとう、それは問題をうまく説明します。 – ben3000

+0

Andreas、OMGあなたはそれをすべてやりました。あなたはその答えの所有者でなければなりません!ありがとうございます。 –

関連する問題