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

Java 在强制转换表达式中使用AdditionalBound,java,casting,java-8,Java,Casting,Java 8,JLS8中描述的AdditionalBound是否可用于转换除lambda表达式或方法引用之外的任何 据说,它可能是: ( ReferenceType {AdditionalBound} ) UnaryExpressionNotPlusMinus 而且: 由强制转换引入的强制转换上下文(§5.5)的目标类型 表达式是由ReferenceType表示的交集类型(…) 以及cast运算符中出现的附加绑定项 但是我没有找到一个可用的例子,比如非-lambda或非-method参考例子,比如: X

JLS8中描述的
AdditionalBound
是否可用于转换除lambda表达式或方法引用之外的任何

据说,它可能是:

( ReferenceType {AdditionalBound} ) UnaryExpressionNotPlusMinus 
而且:

由强制转换引入的强制转换上下文(§5.5)的目标类型 表达式是由ReferenceType表示的交集类型(…) 以及cast运算符中出现的附加绑定项

但是我没有找到一个可用的例子,比如-lambda或-method参考例子,比如:

 X x = (I1&I2) some_UnaryExpressionNotPlusMinus
UPD:

特别是,它允许

X=(I1&I2)~UnaryExpression
,其中
~
是一元运算符

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

UPD-2:多亏了@Jimmy T,他展示了一个可行的

objectx=(数字&可序列化)~0

但如果能看到一个非冗余的示例,这样的转换就很有意义了

UPD-3:根据以上所有表达式都已编译的事实,但它们都没有任何意义:

    Object l1 = (Collection & Iterable) new ArrayList<>();
    List l2 = (ByteList & Iterable) new ArrayList<>();
    Collection l3 = (List & Iterable) new ArrayList<>();
objectl1=(Collection&Iterable)新建ArrayList();
列表l2=(ByteList&Iterable)新ArrayList();
集合l3=(列表和Iterable)新ArrayList();
我无法想象这样的铸造会是明智的。

这可以编译成:

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

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

}
这也可以编译为:

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

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

}
void方法()
{
方法2((编号和可序列化)~0);
}
无效方法2(T x)
{
}
实际需要强制转换的示例:

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

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

}
void方法(对象o)
{
方法2((列表和自动关闭)o);
}
无效方法2(T v)
{
}

Cool,+1。但是这个类转换用例是多余的,有什么想法可以解释吗?当调用方法时,转换更有意义。只有在不使用一元运算符的情况下才有意义,因为其他情况下,某些_UnaryExpressionNotPlusMinus的类型是由最终包装类表示的原语。不完全如此,示例
Collection l3=(List&Iterable)new ArrayList(),但它也是senselessIt,如果您在方法调用中使用它,它是有意义的(我添加了一个示例)