2016-01-10 5 views
6

ラムダ式またはメソッド参照の場合は、を除く、をキャストするためにJLS8 cast expressionに記載されているAdditionalBoundを使用できますか?キャスト式のAdditionalBoundの使用

それができることを、言われている:

(ReferenceType {AdditionalBound}) UnaryExpressionNotPlusMinus 

とその:

式が(あるキャストによって導入鋳造コンテキスト(§5.5)のターゲット・タイプ.. 。)参照型 で示される交差タイプと、キャスト演算子に表示されるAdditionalBound項。

X x = (I1&I2) some_UnaryExpressionNotPlusMinus 

UPD:

しかし、私は -lambdaまたは -method、参考例で実行可能な例を見つけることができなかったんだ、何かのように言います特に、それは何かを可能にする

X x = (I1&I2) ~ UnaryExpression~は単項演算子です。

この場合、X,I1,I2UnaryExpressionのいずれかがわからない。

UPD-2: @Jimmy T.のおかげで、彼は

Object x = (Number&Serializable)~0;の実用例を示しています。

しかし、このようなキャストには意味がある非重複の例を見るとよいでしょう。

UPD-3:

Object l1 = (Collection & Iterable) new ArrayList<>(); 
    List l2 = (ByteList & Iterable) new ArrayList<>(); 
    Collection l3 = (List & Iterable) new ArrayList<>(); 

は、このようなキャスティングが賢明だろう場合を想像することはできません。すべてのこれらの式がコンパイルされ、上記によると、それらのすべては、いかなる意味を持っていません。

答えて

4

これはコンパイルすることができます。

Object x = (Number&Serializable)~0; 

これもコンパイルすることができます。

void method() 
{ 
    method2((Number&Serializable)~0); 
} 

<T extends Number&Serializable> void method2(T x) 
{ 

} 

キャストが実際に必要とされている例:

void method(Object o) 
{ 
    method2((List&AutoCloseable)o); 
} 

<T extends List&AutoCloseable> void method2(T v) 
{ 

} 
+0

クール、+1を。しかし、このクラスのキャスティングケースは重複しています。 – Andremoniy

+1

メソッドを呼び出すときにキャスティングがより意味を持ちます。 –

+0

'method2(〜0);'もここで動作します – Andremoniy

関連する問題