将Java数组分配给非数组属性 - 可Serilizable

Dam*_*ian 2 java arrays

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

import java.io.Serializable;

public class ArrayConversions {
    Serializable serial = new Serializable[5];
    Runnable run = new Runnable[5];
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 8

第一行编译,因为所有数组都实现Serializable.从JLS部分10.8:

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

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

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

所以你可以使用:

Serializable serial = new int[10];
Run Code Online (Sandbox Code Playgroud)

碰巧已经创建了一个Serializable[],但是这只是一个巧合-它不喜欢你的意思是能够数组类型的值赋给它的元素类型的值.

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

Object o = new Object[10]; // Or new String[10] or new int[10] or whatever
Run Code Online (Sandbox Code Playgroud)

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