方括号后跟花括号是否应该导致数组初始化错误?

时间:2013-02-27 19:15:08

标签: java spring gwt

这个问题来自Spring Spring框架和Spring Scaffolding过程生成的GWT前端的上下文。

问题1

我对下面的块有两个问题。一个是'new String [] {key};'部分。如何在它们之后直接使用带花括号的方括号? 方括号后跟花括号是否会导致数组初始化错误?

问题2

此外,它表示此方法按照DAO层所需的顺序返回主键字段,但看起来此方法最多可返回一个具有Object []和keyValuesAsText []的键。由于输入只是一个字符串,如何可能扩展为返回DAO对象的键数组?

由于这是我关于stackoverflow的第一个问题,因此我们会对问题的质量和问题的方式提出任何建议。

/**
  * Returns the Primary Key field values in the order they are required by the DAO     
   layer to find by primary key
  * @param key
  * @return
  */
protected Object[] getPrimaryKeysFromGoogleKey(String key) {
    String[] keyValuesAsText = new String[] { key };

    Object[] keyValues = new Object[keyValuesAsText.length];
    keyValues[0] = new Integer(keyValuesAsText[0]);

    return keyValues;
}

1 个答案:

答案 0 :(得分:1)

问题1:

String[] keyValuesAsText = new String[] { key };

这是Java的数组创建语法之一。另一个是

String[] keyValuesAsText = { key };

使用此语法Java根据在同一行上声明的变量类型推断数组的类型。

如果你写:

String[] keyValuesAsText;
keyValuesAsText = {key};

这不起作用,因为Java不会推断出数组的类型。在这种情况下,你必须写:

String[] keyValuesAsText;
keyValuesAsText = new String[] {key};

我不确定这是否是一个好的语言设计功能,因为编译器可以根据变量的类型推断出数组的类型。

问题2:

protected Object[] getPrimaryKeysFromGoogleKey(String key) {
    //creates an array with only one value so keyValuesAsText.length is always 1 
    String[] keyValuesAsText = new String[] { key };

    //sames as Object[] keyValues = new Object[1];
    Object[] keyValues = new Object[keyValuesAsText.length];

    //sets the first value of the keyValues array to the Integer.parseInt(key);
    keyValues[0] = new Integer(keyValuesAsText[0]);

    //the entire method could be replaced with the following line:
    //return new Object[] { new Integer(key) };    
    return keyValues;
}

它总是返回一个只有一个值的对象数组(从键解析的整数)。