为什么第一行下面的方法编译而第二行不编译?我希望两者都失败。
import java.io.Serializable;
public class ArrayConversions {
Serializable serial = new Serializable[5];
Runnable run = new Runnable[5];
}
答案 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
对象。