たとえば、指定されたで表される測定値Measure.doubleValue(Unit<?> unit)
を返すメソッドを使用します。変数を渡すと、まだ非常に不可解な(私にとって)エラーメッセージが表示されます。double
Unit
Unit<?>
The method doubleValue(Unit<capture#27-of ?>) in the type Measurable<capture#27-of ?> is not applicable for the arguments (Unit<capture#28-of ?>)
誰かがそれ#27-of ?
(または他の数字)が何を意味するのかを説明できれば、そしてこれを取り除くためのエレガントな方法があれば幸いです。これまでのところ、を削除し<?>
て呼び出しメソッドを設定すると(したがって、の代わりに@SuppressWarnings("unchecked")
チェックを外して渡す)、すべてが期待どおりに機能しますが、これについては興味があり、警告を抑制することは良い習慣ではないように感じます(isn'空のキャッチブロックのようなものですか?)Unit
Unit<?>
ありがとう!
編集:いくつかのコードを追加します。
(申し訳ありませんが、これはかなり長いですが、それは私が立ち往生していることを詳細に説明しています。)
JSR-275 バージョン0.9.4(最新)を使用しています。
だから...私がこれを書くと(非常にばかげた例):
Measure measure = Measure.valueOf("3 m");
measure = Measure.valueOf(measure.doubleValue(Unit.valueOf("km")), Unit.valueOf("km"));
System.out.println(measure);
動作し、「0.0030km」を印刷します。しかし、「メジャーはraw型です。ジェネリック型Measure <Q>への参照はパラメーター化する必要があります」というMeasure
警告が表示されます。「型の安全性:メソッドdoubleValue(Unit)はraw型Measurableに属します。ジェネリック型への参照Measurable <Q>は、パラメータ化する必要がありますmeasure.doubleValue(Unit.valueOf("km"))
。
これらの警告を見て、私はこのように調整できると思いました(最初の行のみ):
Measure<Length> measure = Measure.valueOf("3 m");
そして、割り当ての右側に「タイプの不一致:Measure <capture#1-of?>からMeasure<Length>に変換できません」というエラーメッセージが表示されます。It(Eclipse)は、適切な部分をにキャストすることを提供します(Measure<Length>)
。しかし、右側の部分に警告メッセージが表示されます。「タイプセーフティ:チェックされていないキャストをMeasure <capture#1-of?>からMeasure<Length>に」。提案された修正:@SuppressWarnings
これは避けたいと思います(私が推測するパラノイアの理由で)。
それで、私は戻ってMeasure measure = Measure.valueOf("3 m");
ワイルドカードを付けようとしますMeasure
。明らかに、現時点では「3m」が何を意味するのかわかりません。である可能性がありますがLength
、Mass
またはである可能性もありTime
ます。だから私は得る:
Measure<?> measure = Measure.valueOf("3 m");
そして、この行には警告やエラーはありません。素晴らしい。しかし、2行目:
measure = Measure.valueOf(measure.doubleValue(Unit.valueOf("km")), Unit.valueOf("km"));
次のエラーメッセージが表示されますdoubleValue
: " Measurable <capture#3-of?>型のメソッドdoubleValue(Unit <capture#3-of?>)は、引数(Unit <capture#4-of?>)には適用できません。 ) "。Unit.valueOf("km")
としてキャストすることをお勧めし(Unit<?>)
ます。罰金。今、まったく同じ場所にエラーメッセージが表示されます: " Measurable <capture#3-of?>型のメソッドdoubleValue(Unit <capture#3-of?>)は、引数(Unit <capture#5 -の?>) "。数値が変更されていることに注意してください。これはまったく同じパラメータではありませんが、同様の理由です。次に、それはすでに行われているので、コードに何の変更ももたらさないまったく同じ提案を行います。
それが私を悩ませているものです。それを機能させる唯一の方法は、@SuppressWarnings
それらを無視するか、単に無視するようです。変じゃないですか?