作为实验,我尝试扩展int
-array,如下所示:
public class IntArrayExtension extends int[]{
// additional fields and methods.
}
在类本身中添加一些与排序,交换,子数组构建等有关的方法。但是我在编译时遇到了这个错误:
IntArrayExtension.java:1: unexpected type
found : int[]
required: class
public class IntArrayExtension extends int[]{
^
1 error
我很好奇:为什么Java不允许扩展数组?
问题内容: 我想知道Java中是否有特殊原因总是使用“ ”而不是“ ”来定义类型参数的界限。 例: 被禁止但是 是正确的。是什么原因呢? 问题答案: 在类“实现”还是“扩展”之间,通用约束语言没有语义差异。约束可能性是“扩展”和“超级”-也就是说,该类是可分配给其他类的对象(扩展),还是该类可从该类分配(超级)。
问题内容: 通常,Java可被视为类型安全的语言。我知道泛型有一些缺陷,但是最近我遇到了一个从未有过的问题。分解: 不会导致预期的编译时错误。我假设Array的声明将不允许指向其他数组。在泛型中,我不允许做类似以下这样的怪异的事情: 如果我尝试诱使Java做一些事情 可以声明它,但只能添加type的对象。 Java为什么不阻止声明这种奇怪的数组? 问题答案: 我认为除了“传统设计”之外,没有其他答
问题内容: 创建数组时,无法更改其大小;它是固定的。好的,看起来不错,我们可以创建一个新的更大的数组并逐个复制值,这有点慢。它的技术背景是什么? 问题答案: 这个问题没有提到语言,因此我将选择基于“ C”的数组作为答案。 数组被分配为单个内存块。增长数组是有问题的,因为正确执行此操作的唯一方法是在最后增长它。为了增加大小N,在数组的末尾必须在下一个分配的地址之前至少有N个空闲字节。 要支持这种类型
Java说: 所以说数组是协变的。但对于泛型,他们说: 因此它是不变量。但问题是,“泛型真的不变吗?”? 例如,如果我给出: 这意味着列表可以采用异常的子类型,例如这是有效的: 那么为什么泛型被称为不变量呢?
下面的泛型代码无法编译,我可以理解原因:这是为了阻止可能不兼容的类型添加到集合中: 然而,我可以对数组做同样的事情,并且不会得到编译器错误。当我运行它时,我会得到一个 为什么编译器不阻止我上传数组,因为它会麻烦地阻止我上传泛型?
问题内容: Java中的数组的长度是固定的。Java为什么要允许大小为0的数组呢? 问题答案: 它表示它为空。即您可以遍历它,就好像它有项目并且没有结果发生一样: 从而避免了检查的需要。如果所讨论的数组为,则会发生异常,但是在这种情况下,它什么也不做,这可能是适当的。