Установить размер на массиве Char в Java
-
08-10-2019 - |
Вопрос
Я разрабатываю приложение для Android.
Я хочу установить размер на массив Char, как это:
public char[5] language;
Но это не работает. Я должен удалить номер пять, чтобы сделать его работать.
Я хочу ограничить пять символов языковой переменной. Как я могу это сделать?
Спасибо.
Решение
Вы не можете сделать это так. В Java тип массива не включает его размер. Увидеть мой ответ на Этот ранний вопрос. Отказ (Игнорируй часть о abstract
Методы в этом вопросе ... это не реальная проблема.)
Размер массива определяется выражением, которое создает его; Например, следующее создает массив CHAR, который содержит 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)
.
Ресурсы :
На той же теме:
Сама переменная - это просто массив типа Char (char[]
), так что вы не можете ограничить размер переменной тип. Отказ То, что вы можете ограничить, это размер массива, который вы создаете и сохраняете до этой переменной:
char[] language = new char[4];
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;
}
Может быть, вы хотите попробовать универсальный стиль, используя 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;
}