已任一项看到的阵列[]
置于这样的方法签名后?
public static String mySplit(String s)[] {
return s.split(",");
}
public static void main(String... args) {
String[] words = mySplit("a,b,c,d,e");
System.out.println(Arrays.toString(words));
}
版画
[a, b, c, d, e]
在过去,奇怪的符号已经为“C”的兼容性,但我不想象别人用C或者写这个。
有谁知道这是为什么,甚至允许?
我使用的Java 7更新10,如果它很重要。
这做同样的事情在Java中6 http://ideone.com/91rZV1
顺便说一句,这并不编译,我也希望它
public static <T> List mySplit(String s)<T> {
return Collections.emptyList();
}
有谁知道这是为什么,甚至允许?
在这种情况下,它是用Java本身的向后兼容性。 从JLS节8.4 :
为了与旧版本的Java SE平台的相容性,它返回一个阵列的方法的声明被允许放置(一些或全部),其形成所述形参列表后的数组类型的声明中的空的托架对。 这是由以下的落后生产支持,但不应该在新的代码中使用。
是的,你确实应当把它作为具有比冲击其他开发人员之外,没有其他好的目的所憎恶的。 其实,你也许可以用它下的赌注,这将汇编,对谁从来没有见过它乡亲当事人赢得一些钱...
这里是那种其中有正义感的程序员认为那些是无效的方法:
public String[] mwahahaha(String[] evil[])[] {
return evil;
}
就像是
String[] a;
是相同的
String a[];
同一作品方法的返回类型的语法
public static String mySplit(String s)[] {
是相同的
public static String[] mySplit(String s) {
但我觉得我从来没有看见你在生产代码中提到尚未版本。
我认为它同样的原因,以下变量声明都是等价
String[] array
String array[]
这是一个东西C语言开发人员做的,所以它被列入,以帮助他们。
我认为它只是告诉Java的返回类型为数组Strings
,与声明
static String[] mySplit(String s) {...
类似声明变量:
String myStringArray[];
相当于
String[] myStringArray;
好问题; 当我实现了一个Java解析器我记得在这一点上JLS语法变得非常困惑。
为了对约翰的回答扩大,这里是发生了什么:
- 这就是所谓的“混合符号”在规范
- 的语法打破类型声明成两片,其中的每一个可以具有0个或多个
[]
小号
有(至少)5米的地方,这很重要:
- 方法类型签名
- 局部变量声明
- 字段声明
- 形式参数
-
for
-loops
这里是从语法的摘录,注重方法的声明:
MethodOrFieldDecl:
Type Identifier MethodOrFieldRest
MethodOrFieldRest:
FieldDeclaratorsRest ;
MethodDeclaratorRest
MethodDeclaratorRest:
FormalParameters {[]} [throws QualifiedIdentifierList] (Block | ;)
Type:
BasicType {[]}
ReferenceType {[]}
(注意:这是难以阅读语法因为方大括号有时文字,有时元字符。)
这表明[]
可以出现二者下的Type
的规则,并且作为部分MethodDeclaratorRest
规则。 正是在这两个地方可选。