用户定义的类的数组的大小为long类型时的编译错误

时间:2018-08-15 11:34:51

标签: java

当我使用Java时,我尝试创建Node类的数组。对于指定大小,我以前使用int,它工作正常,但是当我更改为long时,这给了我编译错误。请检查下面的代码。

public class Simple {
    long maxsize = 7657567579l; // it fails when i tried to use value out-of-range of int
    Node[] nudes = new Node[maxsize];

    public static void main(String[] args) {
        Simple simple = new Simple();
    }
}

class Node {
    public Object data;
    public long next;

    public Node(Object data, long next) {
        super();
        this.data = data;
        this.next = next;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }

    public long getNext() {
        return next;
    }

    public void setNext(int next) {
        this.next = next;
    }

}

2 个答案:

答案 0 :(得分:2)

因为构造函数采用了int参数?除了编译错误,您还期望发生什么?您无法创建

array[Integer.MAX_VALUE]

但是您可以:

array[Integer.MAX_VALUE - 4]

甚至是这些最后声明的数组中的10个,几乎是不能声明的数组的10倍。

答案 1 :(得分:1)

您可以在下面的链接中找到有关阵列创建的文档

https://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.10

  
    

每个维表达式都经过一元数值提升。提升的类型必须为int,否则会发生编译时错误。

  

因此,在编译时和运行时,使用bytecharintint应该可以正常工作。

正如预期的那样,long可以提升为Sub Macro1() Dim i As Long Range("B5:E5").Offset(i).Select With ActiveSheet.Shapes.AddChart With .Chart .ChartType = xlColumnClustered .SetSourceData Source:=Range("Pivot!$A$3:$E$5").Offset(i) .SeriesCollection(1).ApplyDataLabels .SeriesCollection(2).ApplyDataLabels .SeriesCollection(3).ApplyDataLabels .ShowValueFieldButtons = False .HasTitle = True .ChartTitle.Text = "Consolidated" End With .Name = "chart" & Format(i + 1, "000") .Width = 288 .LockAspectRatio = msoTrue End With End Sub ,而不是相反,您的代码会出现编译时错误