获取java中方法的变量参数的数量

Rob*_*scu -1 java string.format variadic-functions

请注意以下潜在的愚蠢问题:

我有一个方法,使用String.format()方法格式化一些文本.目前,它接收两个参数,所以我有两个"%s"参数来创建我想要的任何文本.

但有人可能想用我的方法使用3个参数,或4或100.如何将传递的参数的长度作为varargs获取到String.format()方法的长度,以便在传递3个参数的情况下,将有3个"%s"而不是当前的2个; 或4或100.

如何获取传递给String.format()方法的参数数量,以便其中的文本根据需要自动添加"%s"?因为参数只是作为常规参数传递,而不是作为数组或类似的传递.如何获取参数数组的长度?

PS.这很重要 - 我不是在谈论获取(String ...参数) - 没有这样的事情 - 当有人调用你的方法时,它使用实际参数,"String ... arguments"不可用于抓取和获得它的长度.

我意识到这是一个制定得很糟糕的问题,因为我没有在我面前的代码进一步解释,但这已经困扰了我很长一段时间 - 你如何获得传递给方法的参数数量?

对于这样的事情:

String.format(SomeObject.SomeString, param1, param2,...,param 100)
Run Code Online (Sandbox Code Playgroud)

编辑:SomeObject.SomeString声明如下:

String SomeString = "Blah blah %s blah blah blah %s";

所以它有两个正在硬编码的参数.

当有人使用它时,你如何自定义SomeObject.SomeString以便"知道"已经将多少参数传递给String.format()方法(以便SomeObject.SomeString知道动态添加多少%s)?

Kay*_*man 8

因为参数只是作为常规参数传递,而不是作为数组传递.

不,这些值作为数组传递,因此您可以编写

public String myVarags(String... args) {
    String s = "";
    for(int i = 0;i < args.length; i++)
        s += "%s ";
    return String.format(s, args);
}
Run Code Online (Sandbox Code Playgroud)

它将为每个参数生成一个Stringa %s,然后使用给定的值格式化String.这也是一种非常愚蠢和无用的方法.

varargs表示法只是语法糖,它是运行时的数组.


yit*_*zih 5

听起来好像您要访问传递给采用vararg作为参数的另一种方法(该String.format()方法)的参数数量。

如果您无法更改方法中的代码,则无法知道向方法中传递了多少个参数。而且,该String参数肯定不知道传入了多少参数。它是一个完全独立的对象。

您唯一可以做的就是创建包装器方法。您可以采用相同的varargs,然后将它们传递给进行所需String.format()更改的方法。

然后,无论调用什么代码,都String.format()需要调用包装方法。

例:

public String StringFormatWrapper(String...args) {
    //perform actions on the args
    if (args.length > 1) 
        args[1] = "Hello World";

    //call the String.format() method
    return String.format(args)
}
Run Code Online (Sandbox Code Playgroud)

如果您无法访问正在通话的内容,String.format()那么您想做什么就不可能了。