Установить размер на массиве символов в Java - PullRequest
2 голосов
/ 16 октября 2010

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

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

public char[5] language;

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

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

Спасибо.

Ответы [ 5 ]

9 голосов
/ 16 октября 2010

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

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

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

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

5 голосов
/ 16 октября 2010

Цитировать 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).


Ресурсы:

На ту же тему:

1 голос
/ 16 октября 2010

Может быть, вы хотите попробовать общий стиль, используя 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;
}
1 голос
/ 16 октября 2010

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

char[] language = new char[4];
1 голос
/ 16 октября 2010
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;
}
...