在强制转换表达式中使用AdditionalBound

And*_*niy 6 java casting java-8

可以AdditionalBound在JLS8中描述的演员表达式用于除了 lambda表达式或方法引用之外的任何东西吗?

据说,它可能是:

( ReferenceType {AdditionalBound} ) UnaryExpressionNotPlusMinus 
Run Code Online (Sandbox Code Playgroud)

然后:

由强制转换表达式引入的强制转换上下文(第5.5节)的目标类型是(...)由出现在强制转换运算符中的ReferenceType和AdditionalBound术语表示的交集类型.

但我找不到 -lambda 或非 -method-reference示例的可行示例,例如:

 X x = (I1&I2) some_UnaryExpressionNotPlusMinus
Run Code Online (Sandbox Code Playgroud)

UPD:

特别是,它允许类似的东西

X x = (I1&I2) ~ UnaryExpression,~一元运算符在哪里.

我不知道应该是什么X,I1,I2而且UnaryExpression在这种情况下.

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<>();
Run Code Online (Sandbox Code Playgroud)

无法想象这种铸造是否明智的情况.

Jim*_* T. 4

可以这样编译:

Object x = (Number&Serializable)~0;
Run Code Online (Sandbox Code Playgroud)

这也可以编译:

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

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

}
Run Code Online (Sandbox Code Playgroud)

实际需要强制转换的示例:

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

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

}
Run Code Online (Sandbox Code Playgroud)