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)
无法想象这种铸造是否明智的情况.
可以这样编译:
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)
| 归档时间: |
|
| 查看次数: |
88 次 |
| 最近记录: |