小编Zhu*_* Li的帖子

为什么我不能在Java中创建类型参数的数组?

好吧,我已经阅读了很多这个问题的答案,但我有一个更具体的问题.以下面的代码片段为例.

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)

java arrays generics

17
推荐指数
2
解决办法
680
查看次数

为什么 RPC 使用术语“存根”?

维基百科说

分布式计算中的存根是一段代码,用于转换远程过程调用 (RPC) 期间客户端和服务器之间传递的参数

该词的原始含义stub与其在 RPC 中的功能有何关系?

rpc grpc

9
推荐指数
1
解决办法
6332
查看次数

为什么以下代码不会导致"未经检查的强制转换"警告?

我认为这(String)x是一个未经检查的演员,但编译器没有给出任何警告.为什么会这样?

public static void main(String[] args) {
        Object x=new Object();
        String y=(String)x;
    }
Run Code Online (Sandbox Code Playgroud)

java unchecked-cast

5
推荐指数
1
解决办法
228
查看次数

标签 统计

java ×2

arrays ×1

generics ×1

grpc ×1

rpc ×1

unchecked-cast ×1