相关疑难解决方法(0)

我可以将数组作为参数传递给Java中带有变量参数的方法吗?

我希望能够创建一个像这样的函数:

class A {
  private String extraVar;
  public String myFormat(String format, Object ... args){
    return String.format(format, extraVar, args);
  }
}
Run Code Online (Sandbox Code Playgroud)

这里的问题是在方法中args处理,因此是单个参数,而我希望每个in 都作为新参数传递.既然也是一个带有变量参数的方法,这应该是可能的.Object[]myFormatString.formatObjectargsString.format

如果这是不可能的,有没有像这样的方法String.format(String format, Object[] args)?在这种情况下,我可以在前面加上extraVarargs使用新的数组,并把它传递给该方法.

java arrays backwards-compatibility variadic-functions

256
推荐指数
5
解决办法
20万
查看次数

了解Java中varargs的意外行为

我正在读这个答案,它说的是

另请注意,使用显式数组参数调用泛型vararg方法可能会默默地产生与预期不同的行为:

public <T> void foo(T... params) { ... }
int[] arr = {1, 2, 3};
foo(arr); // passes an int[][] array containing a single int[] element
Run Code Online (Sandbox Code Playgroud)

类似的行为在这个答案得到解释3:

int[] myNumbers = { 1, 2, 3 };
System.out.println(ezFormat(myNumbers));
// prints "[ [I@13c5982 ]"
Run Code Online (Sandbox Code Playgroud)

Varargs仅适用于引用类型.自动装箱不适用于基元数组.以下作品:

Integer[] myNumbers = { 1, 2, 3 };
System.out.println(ezFormat(myNumbers));
// prints "[ 1 ][ 2 ][ 3 ]"
Run Code Online (Sandbox Code Playgroud)

我尝试了更简单的例子:

private static <T> void tVarargs(T ... s)
{
    System.out.println("\n\ntVarargs ==========");
    System.out.println(s.getClass().getName());
    System.out.println(s.length);
    for(T i …
Run Code Online (Sandbox Code Playgroud)

java

13
推荐指数
1
解决办法
119
查看次数

Java方法参数:var args vs array

在整个Google Guava库中,我注意到了使用"一(或两个)加var args"技术的倾向.

例子:

  • void add(T value, T... moreValueArr)
  • void add(T value, T value2, T... moreValueArr)

我花了一段时间才弄清楚原因:为了防止使用零args(第一种情况下)或一种arg(第二种情况)调用.

如果在下面的场景A和B之间做出选择,那么进一步扩展这项技术,哪个更好?我希望有深入Java知识的人可以提供洞察力.

情景A :(两种方法)

  1. void add(T... valueArr)
  2. void add(Iterable<? extends T> iterable)

情景B :(三种方法)

  1. void add(T value, T... moreValueArr)
  2. void add(T[] valueArr)
  3. void add(Iterable<? extends T> iterable)

一个想法为什么B可能更好:我注意到许多Java程序员都不知道数组可以直接作为var args传递.因此,B可能提供关于可能性的暗示.

最后,我意识到B有额外的开发,测试和维护开销.请把这些考虑放在一边.

这个问题是我原来问题的一个微妙变化:Java varags方法参数列表与数组

java arrays variadic-functions guava

7
推荐指数
3
解决办法
1928
查看次数

String [] a和String ... a之间的区别

当我们在main方法和String中编写String [] a时有什么区别?a?

public static void main(String[]a)
Run Code Online (Sandbox Code Playgroud)

public static void main(String...a)
Run Code Online (Sandbox Code Playgroud)

java string

6
推荐指数
2
解决办法
966
查看次数

将数组扩展为函数的多个参数

如何将数组作为三个参数传递给Java中的函数?(原谅我,我对Java很新).

我有以下函数float r, float g, float b, float a作为参数.

renderer.prepare(r, g, b, 1);
Run Code Online (Sandbox Code Playgroud)

我想传递这个函数的输出.(或者弄清楚如何返回三个单独的解压缩浮点数).

public static float[] rgbToFloat(int r, int g, int b) {
    return new float[] {(float) r / 255f, (float) g / 255f, (float) b / 255f};
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?在其他一些语言中,它看起来像这样:

renderer.prepare(...rgbToFloat(25, 60, 245), 1); 
Run Code Online (Sandbox Code Playgroud)

java arrays function

6
推荐指数
1
解决办法
897
查看次数

java中String[]数据和String...数据有什么区别

我曾尝试使用datadata1变量。它总是调用String ... data。那么,java中的String[]数据String...数据有什么区别呢

public class ArrayTest {

    public static void main(String[] args) {

        ArrayTest arrayTest = new ArrayTest();
        // Option one
        String[] data = {"A", "B", "C"};
        // Option two
        String data1 = "A";
        arrayTest.test(data);


    }

    public void test(String[] ... data  ) {
        System.out.println("---From: String[] ... data---");

        for(String[] item: data) {

            for(String innerItem : item) {
                System.out.println(innerItem);
            }

        }
    }

    public void test(String ... data  ) {
        System.out.println("---From: String …
Run Code Online (Sandbox Code Playgroud)

java variadic-functions

5
推荐指数
1
解决办法
218
查看次数