为什么只对注释数组参数使用方括号可以,而对方法参数不使用方括号?

问题描述

好吧,Java 语法中有些东西让我有点不明白。

当注解接受一个数组作为其参数值之一时,我们可以通过在几个括号内提供值来实现,如下所示:

public @interface SomeAnnotation {
  String[] someParam();
}
@SomeAnnotation(someParam = { "foo","bar" })
public class Example {}

这是传递值数组的一种非常简洁明了的方式。喜欢它。

但是在调用方法时不能这样做:

public interface Example {
  public static void someMethod(String[] someParam) {
    // Do something
  }
}

// ...
Example.someMethod({ "foo","bar" }); // Syntax Error :(

从外观上看,注解的 someParam 和方法 someParam 都声明为 String[] 数组。

我想这与 Java 在底层处理注释的方式有关,和/或 someParamSomeAnnotation 中被声明为一种方法(末尾带有括号)的事实,但还是……为什么?

如果有人能对此有所了解,我将不胜感激。

请注意,我不是在寻找替代方案或解决方法,而是在寻找一些解释。

后续问题

我知道我可以使用 new String[]... 语法调用该方法,如下所示:

Example.someMethod(new String[] { "foo","bar" });

但这对我来说也很奇怪,因为参数应该是一个 String 数组,而括号内的值确实是 String。我希望编译器能够进行匹配并且对此没有问题。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)