2016-01-08 9 views
5

JavaFXで追加されたPropertyインターフェイスには、タイプパラメータTがあります。これは、プロパティでラップされた値のタイプです。 IntegerPropertyFloatPropertyなどすべてのこれらのクラスはProperty<Number>を実装:Propertyインタフェースの実装の中でIntegerPropertyがプロパティ<Number>を実装し、プロパティ<Integer>を実装しないのはなぜですか?

、数字のためにいくつかあります。

たとえば、IntegerPropertyとしましょう。私が期待したようにProperty<Number>を実装し、Property<Integer>を実装していない理由は何ですか?ここで


IntegerPropertyの階層を明確にUMLダイアグラムである:

enter image description here

+0

私はデジャヴュの奇妙な感覚を持っています。これまでにこの質問をしましたか? – Kayaman

+1

@Kayamanいいえ、以前は尋ねられたことはありません。私は他の誰かが既に行ったかどうかを確認するために最善を尽くしました。 –

+2

数値プロパティを簡単にバインドするために、このように実装されている可能性があります。 http://stackoverflow.com/q/28179293/1288408 –

答えて

5

このデザインが意図され、Javaのバグレポート(DoubleProperty has unexpected generics type)のコメント欄で述べたように。必要なメソッドの数を大幅に少なくします。この回答のコメントで


James_Dはその問題をadressing後にバグレポート、ChangeListener cannot be added to SimpleIntegerProperty)の私は認識して作られました。コメント

下位互換性の問題により、プリミティブタイプのプロパティのジェネリック(Numberから特定のタイプへ)を変更しないことにしました。ただし、この問題は修正できないことを意味します。

は、チームがデザインの変更を検討していたと示していますが、遅すぎました。

+3

Randahl Isaksenのコメントに同意する必要があります:「これは私にとって、ジェネリックの不適切な使用であるようです。ジェネリックスを使用するFruitCrateはCrate であり、Crateはありません。ジェネリックの使用の目的は、コンパイル時の型の安全性とキャストを保証することです。 このデザインはAPIを内部的に簡素化するかもしれませんが、外部的にはJavaFX APIの品質を低下させることに気付きました。 – Itai

+3

JavaFXデベロッパーチームの後のコメント(http://mail.openjdk.java.net/pipermail/openjfx-dev/2014-February/012739.htmlを参照)では、「私たちは修正しようとしましたこれはあまりにも遅かった "と私には意図していたかもしれないが間違いであったことを示唆している。 APIをコンビナトリアルに展開することを伴わない他の解決策がある。多くの人に示唆されているように 'public abstract class NumberProperty はProperty 'と 'public class IntegerProperty extends NumerProperty 'を実装しています。 –

0

あなたがようAtomicIntegerBigIntegerなどでこれらのクラスを使用することができますので、私は、彼らがNumberを使用することを言うだろうよく

は、私の知る限り、DoublePropertyIntegerPropertyの間だけ「本当」の違いは、メソッドsetValue(Number v)ある - 1はv.doubleValue()、他のv.intValue()を使用しています。

IntegerPropertyDoubleを使用すると例外がスローされますが、ここでは正常なjavafx環境がありません。テストできません。

関連する問題