Установить размер на массиве символов в Java

Я разрабатываю приложение для Android.

Я хочу установить размер для массива символов следующим образом:

public char[5] language;

Но это не работает. Я должен удалить номер пять, чтобы это сработало.

Я хочу ограничить до пяти символов языковой переменной. Как я могу это сделать?

Благодарю.

5 ответов

Решение

Вы не можете сделать это так. В Java тип массива не включает его размер. Смотрите мой ответ на этот предыдущий вопрос. (Игнорировать часть о abstract методы в этом вопросе... это не настоящая проблема.)

Размер массива определяется выражением, которое его создает; Например, следующее создает массив символов, который содержит 5 символов, а затем заменяет его другим массивом, который содержит 21 символ.

public char[] language = new char[5];
...
language = new char[21];

Обратите внимание, что создание выполняется выражением на RHS равных. Длина массива является частью его "значения", а не его "типа".

Процитирую JLS:

Длина массива не является частью его типа.

Для инициализации массива вы должны сделать:

public char[] language = new char[5];

Другие решения

public char[] language = {0, 0, 0, 0, 0};

или же

public char[] language;
language = new char[5];

В Java объявление массива не может содержать размер массива; мы только знаем, что переменная будет содержать массив определенного типа. Чтобы инициализировать массив (и с размером), вы должны инициализировать его либо с помощью new или с помощью ярлыка, который позволяет одновременно инициализировать и устанавливать значения для массива.

Лучший способ проверить, имеет ли массив заданный размер, - это на самом деле проверить размер массива самостоятельно с помощью чего-то вроде if(array.length == 5),


Ресурсы:

На ту же тему:

Может быть, вы хотите попробовать общий стиль, используя ArrayList в качестве представления массива. Таким образом, вы можете найти гибкость, используя методы ArrayList.

private ArrayList<Character> alchar = new ArrayList<Character>(5);

............................................


public void addChar(Character ch){
    if (alchar.size() <= 5)
       alchar.add(ch);
}

public ArrayList<Character> getChars(){
   return alchar;
}
public char[] language = new char[5];

Вы не можете ограничить саму переменную длиной 5; вам нужно применить этот инвариант в вашей логике. Что означает, что это также не должно быть публичным:

private char[] language = new char[5];

...

public void setLanguage(final char[] language)
{
   // or maybe language.length != 5, or whatever you really mean
   if (language.length > 5)
     throw new IllegalArgumentException("language must have length <= 5");
   this.language = language;
}

Сама переменная имеет тип char-array (char[]), поэтому вы не можете ограничить размер типа переменной. То, что вы можете ограничить, это размер массива, который вы создаете и сохраняете в эту переменную:

char[] language = new char[4];
Другие вопросы по тегам