在Java中设置char数组的大小

时间:2010-10-16 15:51:19

标签: java android invariants array-initialize

我正在开发一个Android应用程序。

我想将大小设置为这样的char数组:

public char[5] language;

但它不起作用。我必须删除五号才能使其正常工作。

我想限制为语言变量的五个字符。我怎么能这样做?

感谢。

5 个答案:

答案 0 :(得分:8)

你不能这样做。在Java中,数组的类型不包括它的大小。请参阅我对this earlier question的回答。 (忽略该问题中关于abstract方法的部分......这不是真正的问题。)

数组的大小由创建它的表达式决定;例如下面创建一个包含5个字符的char数组,然后用另一个包含21个字符的数组替换它。

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

请注意,创建是通过等于的RHS上的表达式完成的。数组的长度是其“值”的一部分,而不是它的“类型”。

答案 1 :(得分:5)

引用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)之类的方法自行检查数组的大小。


资源:

关于同一主题:

答案 2 :(得分:1)

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;
}

答案 3 :(得分:1)

变量本身只是char-array(char[])类型,因此您无法限制变量 type 的大小。您可以限制的是您实例化并保存到该变量的数组的大小:

char[] language = new char[4];

答案 4 :(得分:1)

也许你想通过使用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;
}