将Java数组分配给非数组属性 - 可序列化

时间:2014-04-27 11:19:19

标签: java arrays

为什么第一行下面的方法编译而第二行不编译?我希望两者都失败。

import java.io.Serializable;

public class ArrayConversions {
    Serializable serial = new Serializable[5];
    Runnable run = new Runnable[5];
}

3 个答案:

答案 0 :(得分:8)

第一行编译因为所有数组都实现了Serializable。来自JLS section 10.8

  

虽然数组类型不是类,但每个数组的Class对象的行为如下:

     
      
  • 每个数组类型的直接超类都是Object。

  •   
  • 每个数组类型都实现了Cloneable和java.io.Serializable接口。

  •   

所以你可以使用:

Serializable serial = new int[10];

发生创建了一个Serializable[],但这只是一个巧合 - 它不像你意味着 em>能够将数组类型值分配给其元素类型值。

所以Object也可以看到你的错误:

Object o = new Object[10]; // Or new String[10] or new int[10] or whatever

...但这些只是数组类型支持的内容。

答案 1 :(得分:0)

数组是Serializable,为什么可以这么说

Serializable serial = new Serializable[5];

答案 2 :(得分:0)

第二个应该是显而易见的。我们期待Runnable[] run...。第一个并不那么明显。这是因为Serializable数组确实以隐藏的方式实现了Serializable接口。因此,数组可以被视为Serializable对象。