2011-10-21 8 views
4

新しいGuava 10 Optionalは、自然共変であるため、キャストすることができます。Guavaの使い方任意の "自然共変オブジェクト"

私はそうしようとすると、それは少し醜い:

Optional<Integer> opti = Optional.of(42); 
Optional<Number> optn = (Optional) opti; 

私はのようないくつかのユーティリティ関数を見たい:

static <T> Optional<T> transform(Optional<? extends T> opt, Class<T> clazz); 

(オプションのメンバ関数としてこれを表現するには?)

は、次のように変換関数オブジェクトを定義することも可能です

Collection<Optional<Double>>Collection<Optional<Number>>に変換するには、それぞれに対して新しいオブジェクトを作成しないでください。

返されたFunctionオブジェクトであっても、内部シングルトンによって実現されると思います。

答えて

8

キャストが実際にあなたが思うよりさえ醜いですが:

Optional<Integer> opti = Optional.of(42); 

@SuppressWarnings("unchecked") // safe covariant cast 
Optional<Number> optn = (Optional) opti; 

...我々はまだそれはあなたが何をすべきまさにだと思う、とあなたが求めるような方法を提供除外しています。

それはあなた必要があります非常にまれはそう長く効果的なJavaでカバーされてあなたは、あなたのAPIの署名に正しくワイルドカードを使用しているとして、このようなことを行う必要があるので、それは少し面倒だと大丈夫です。

8

of方法の種類を指定することで、あなたは完全にキャストを避けることができますが:

 Optional<Number> optx = Optional.<Number>of(42); 
+1

醜い型パラメータの必要がありません: 'Optional.of((番号)42);' –

関連する問題