我希望能够创建一个像这样的函数:
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)?在这种情况下,我可以在前面加上extraVar到args使用新的数组,并把它传递给该方法.
编码我来检查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程序:
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) 为什么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) 到目前为止,我有以下代码:
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)