Во-первых, вы также имеете несоответствие между статикой поля 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];
}
Первый случай имеет один options
массив для каждого экземпляра класса, второй имеет один options
массив разделяется всеми экземплярами класса ,
Однако это не меняет размер размера. Как только размер массива установлен, он не может измениться. Он создает новый массив желаемого размера и назначает его вашему полю.
Старое значение параметров будет собирать мусор (если ничего не используется), и ни одно из его старых значений не будет в новом экземпляре 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>
для хранения ваших опций, поскольку это поддерживает изменения длины без необходимости создания вновь созданного объекта.
Так объединить два варианта: варианты = новый строковый [число]; (Снять параметры String [] = изменить его на просто параметры = ...) –
@Tristan, важно ли вам работать с переменной экземпляра и статическим методом? потому что если нет, то это будет очень легко – Tarik
@Tarik, можно ли использовать ничего статического? – Tristan