【问题标题】:Any way to programatically distinguish between final-param array and final-param ellipsis?以编程方式区分最终参数数组和最终参数省略号的任何方法?
【发布时间】:2014-07-10 09:45:03
【问题描述】:

我正在编写一些代码来基于其java.lang.reflect.MethodConstructor 对象创建JavaDoc 链接。我不明白javadoc.exe 是如何知道具有最终数组参数的函数之间的区别

public static final void doSomething(boolean b, int[] ai, String[] as)  {
}

和那些有省略号参数的

public static final void doSomethingElse(String... as)  {
}

鉴于类对象中没有“省略号”指示。它要么是an array,要么不是一个数组。 name of a class 也包括此指示,通过其 [ 前缀,但同样,只有“array-or-not-array”,没有关于省略号的信息。

最后一个参数数组必须有一个以[]) 结尾的JavaDoc 链接,最后一个参数省略号链接必须以...) 结尾。有没有办法以编程方式区分这一点?

   import  java.lang.reflect.Method;
public class Test  {
  public static final void main(String[] ignored)  {
     Method m = null;
     try  {
        m = Test.class.getDeclaredMethod("doSomething", boolean.class, 
           int[].class, String[].class);
     }  catch(Exception x)  {
        throw  new RuntimeException(x);
     }
     System.out.println(m);
  }
  public static final void doSomething(boolean b, int[] ai, String... as)  {
  }
}

输出:

public static final void Test.doSomething(boolean,int[],java.lang.String[])

【问题讨论】:

  • 也许这很愚蠢,但是您可以尝试以编程方式实例化这两个可能的签名吗?如果他们都编译,它的...,否则它只是[]

标签: java arrays methods javadoc ellipsis


【解决方案1】:

是的。您可以拨打Method.isVarargs();。显然可变参数可能只出现在参数列表的末尾,所以如果method.getParameterTypes() 的最后一个元素是数组调用Method.isVarargs()

【讨论】:

  • 优秀。谢谢你。我被“省略号”这个词困住了。
猜你喜欢
  • 2011-04-14
  • 1970-01-01
  • 1970-01-01
  • 2015-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-17
相关资源
最近更新 更多