更改数组大小

Changing the array size

我正在努力做到这一点,以便您可以使用一种方法更改数组的大小。

private String[] options;

public static void initOptions(int num)
{
    options = [4]; // this doesn't obviously work
}

我可以创建一个新变量

private String[] options;

public static void initOptions(int num)
{
    String[] options = new String[num];
}

但那样我就无法与 class 的其他成员共享数组了。

首先,options 字段和 initOptions 函数的静态性也不匹配。通常你会希望它们相同。也就是说,您想要

private String[] options;

public void initOptions(int num)
{
    options = new String[num];
}

private static String[] options;

public static void initOptions(int num)
{
    options = new String[num];
}

第一种情况对于 class 的每个实例都有一个 options 数组,第二种情况有一个 class 的所有实例共享的 options 数组。

然而,这并没有真正改变数组的大小。 一旦设置了数组大小,它就无法更改。它所做的是创建一个所需大小的新数组并将其分配给您的字段。

选项的旧值将被垃圾收集(如果没有其他东西正在使用它)并且其旧值的 none 将在新的 options 实例中。如果您想保留所有旧选项,您需要将它们复制到新数组中。此外,保留原始选项字段的任何内容都不会看到更改(因为它们将保留旧数组,而不是新创建的版本)

private String[] options;

public void initOptions(int num)
{
    String newOptions = new String[num];
    for(int i=0; i<Math.min(num, options.length); ++i ) {
      newOptions[i] = options[i];
    }
    options = newOptions;
}

有一些辅助实用程序可以让您在核心 Arrays 包中进行一些复制 - 但最好先了解发生了什么。

如果您希望选项字段的其他持有者看到更改,您可以改为使用 ArrayList<String> 来保存您的选项,因为它支持长度更改而无需新创建的对象。

如果您希望为您的字段选项分配选项值您的方法returns您可以写

public void initOptions(int num){
    String[] options=new String[num];
    this.options=options;
}

然后从 main 调用字段 f.e 将调用数组。

您正在使用一个实例变量 options 和一个 static 方法,并且不可能将它们混合使用(您将以编译器错误结束),如果您对此没有真正的限制,选择将 options 变量设为静态或将 initOptions 更改为 non-static,因此您的代码将非常简单:

private static String[] options;

public static void initOptions(int num) {
       options = new String[num];
}