Установить размер на массиве символов в 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];