好吧,我已经阅读了很多这个问题的答案,但我有一个更具体的问题.以下面的代码片段为例.
public class GenericArray<E>{
E[] s= new E[5];
}
Run Code Online (Sandbox Code Playgroud)
在类型擦除之后,它变成了
public class GenericArray{
Object[] s= new Object[5];
}
Run Code Online (Sandbox Code Playgroud)
这段代码似乎运作良好.为什么会导致编译时错误?
此外,我从其他答案中得知,以下代码适用于同一目的.
public class GenericArray<E>{
E[] s= (E[])new Object[5];
}
Run Code Online (Sandbox Code Playgroud)
我读过一些评论说上面的代码是不安全的,但为什么它不安全?任何人都可以向我提供一个特定的例子,其中上面的代码导致错误?
另外,以下代码也是错误的.但为什么?擦除后似乎也能正常工作.
public class GenericArray<E>{
E s= new E();
}
Run Code Online (Sandbox Code Playgroud) 维基百科说
分布式计算中的存根是一段代码,用于转换远程过程调用 (RPC) 期间客户端和服务器之间传递的参数
该词的原始含义stub与其在 RPC 中的功能有何关系?
我认为这(String)x是一个未经检查的演员,但编译器没有给出任何警告.为什么会这样?
public static void main(String[] args) {
Object x=new Object();
String y=(String)x;
}
Run Code Online (Sandbox Code Playgroud)