相关疑难解决方法(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性能

编码我来检查Java的vararg性能.

我写下面的测试代码:

public class T {

    public static void main(String[] args) {

        int n = 100000000;
        String s1 = new String("");
        String s2 = new String("");
        String s3 = new String("");
        String s4 = new String("");
        String s5 = new String("");

        long t = System.currentTimeMillis();
        for (int i = 0; i < n; i++) {
            foo();
        }
        System.err.println(System.currentTimeMillis() - t);


        t = System.currentTimeMillis();
        for (int i = 0; i < n; i++) {
            baz(s1, s2, s3, s4, s5);
        }
        System.err.println(System.currentTimeMillis() …
Run Code Online (Sandbox Code Playgroud)

java performance

15
推荐指数
2
解决办法
5093
查看次数

当在静态上下文中使用实例方法时,为什么javac会发出"错误:类中的方法无法应用于给定类型"?

考虑以下(无效)Java程序:

public class Test {
    public static void main(String[] args) {
        int[] ints = {1, 2, 3, 4, 5};
        print(ints);
    }

    public void print(int... ints) {
        for (int i : ints) { 
            System.out.print(i);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望有类似这样的错误:

Cannot make a static reference to the non-static method print(int[]) from the type Test
at Test.main(Test.java:5)
Run Code Online (Sandbox Code Playgroud)

但相反,javac发出:

Test.java:5: error: method print in class Test cannot be applied to given types;
    print(ints);
    ^
required: int[]
found: int[]
reason: varargs mismatch; int[] cannot be converted …
Run Code Online (Sandbox Code Playgroud)

java javac java-8

7
推荐指数
1
解决办法
495
查看次数

为什么NetBeans警告将int []传递给vararg?

为什么NetBeans预编译器会对此发出警告?

public class PrimitiveVarArgs
{
    public static void main(String[] args)
    {
        int[] ints = new int[]{1, 2, 3, 4, 5};
        prints(ints);
    }

    static void prints(int... ints)
    {
        for(int i : ints)
            System.out.println(i);
    }
}
Run Code Online (Sandbox Code Playgroud)

它抱怨第5行,说:

Confusing primitive array passed to vararg method
Run Code Online (Sandbox Code Playgroud)

但就我而言(和SO上的其他人所知),就像我int...一样int[].如果它是非基本类型,则可以工作String,但不是基元.

我甚至无法添加此方法:

void prints(int[] ints)
{
    for(int i : ints)
        System.out.println(i);
}
Run Code Online (Sandbox Code Playgroud)

因为编译器说:

name clash: prints(int[]) and prints(int...) have the same erasure

cannot declare both prints(int[]) and prints(int...) in PrimitiveVarArgs …
Run Code Online (Sandbox Code Playgroud)

java arrays variadic-functions primitive-types netbeans-8

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

无法对非静态方法进行静态引用

到目前为止,我有以下代码:

import java.util.Scanner;

public class HallLanceMemoryCalculator {
private double currentValue;

public static int displayMenu(){

    Scanner input=new Scanner(System.in);

    int choice=0;

    while(choice<1||choice>5){      
    System.out.println("1.Add");
    System.out.println("2.Subtract");
    System.out.println("3.Multiply");
    System.out.println("4.Divide");
    System.out.println("5.Clear");

    System.out.println("What would you like to do?");
    choice=input.nextInt();
    }
    return choice;
}

public static double getOperand(String prompt){
    Scanner input=new Scanner(System.in);
    System.out.println("What is the second number?");
    double secondNumber=input.nextDouble();
    return secondNumber;
}

public  double getCurrentValue(){
    return currentValue;
}

public void add(double operand2){
    currentValue+=operand2;
}

public void subtract(double operand2){
    currentValue-=operand2;
}

public void multiply(double operand2){
    currentValue*=operand2;
}

public void …
Run Code Online (Sandbox Code Playgroud)

java static-methods

2
推荐指数
2
解决办法
3万
查看次数