เป็นไปได้ไหมที่จะประกาศเมธอดที่อนุญาตพารามิเตอร์จำนวนตัวแปร?
สัญลักษณ์ที่ใช้ในคำจำกัดความที่ระบุว่าวิธีการควรอนุญาตให้มีจำนวนตัวแปรของพารามิเตอร์คืออะไร?
คำตอบ: varargs
เป็นไปได้ไหมที่จะประกาศเมธอดที่อนุญาตพารามิเตอร์จำนวนตัวแปร?
สัญลักษณ์ที่ใช้ในคำจำกัดความที่ระบุว่าวิธีการควรอนุญาตให้มีจำนวนตัวแปรของพารามิเตอร์คืออะไร?
คำตอบ: varargs
คำตอบ:
ถูกต้อง. คุณสามารถหาข้อมูลเพิ่มเติมเกี่ยวกับสิ่งนี้ได้ในคู่มือ Oracle เกี่ยวกับค่าต่างๆ
นี่คือตัวอย่าง:
void foo(String... args) {
for (String arg : args) {
System.out.println(arg);
}
}
ซึ่งสามารถเรียกว่าเป็น
foo("foo"); // Single arg.
foo("foo", "bar"); // Multiple args.
foo("foo", "bar", "lol"); // Don't matter how many!
foo(new String[] { "foo", "bar" }); // Arrays are also accepted.
foo(); // And even no args.
Object...
เพียงแค่ใช้
varargs.length
Variable number of arguments
มันเป็นไปได้ที่จะผ่านจำนวนตัวแปรของการขัดแย้งไปยังวิธีการ อย่างไรก็ตามมีข้อ จำกัด บางประการ:
เพื่อให้เข้าใจถึงข้อ จำกัด เหล่านี้ให้พิจารณาวิธีการในโค้ดต่อไปนี้ที่ใช้เพื่อส่งคืนจำนวนเต็มที่มากที่สุดในรายการจำนวนเต็ม:
private static int largest(int... numbers) {
int currentLargest = numbers[0];
for (int number : numbers) {
if (number > currentLargest) {
currentLargest = number;
}
}
return currentLargest;
}
แหล่งที่มาของ Oracle Certified Associate Java SE 7 คู่มือการศึกษาโปรแกรมเมอร์ 2012
ใช่เป็นไปได้:
public void myMethod(int... numbers) { /* your code */ }
สำหรับประเภทอาร์กิวเมนต์ที่แตกต่างกันมี3 จุด :
public void foo(Object... x) {
String myVar1 = x.length > 0 ? (String)x[0] : "Hello";
int myVar2 = x.length > 1 ? Integer.parseInt((String) x[1]) : 888;
}
จากนั้นเรียกมันว่า
foo("Hii");
foo("Hii", 146);
เพื่อความปลอดภัยใช้แบบนี้:
if (!(x[0] instanceof String)) { throw new IllegalArgumentException("..."); }
ข้อเสียเปรียบหลักของวิธีนี้คือหากพารามิเตอร์ทางเลือกต่างประเภทกันคุณจะสูญเสียการตรวจสอบประเภทคงที่ โปรดดูรูปแบบเพิ่มเติม
ใช่แล้วตั้งแต่ Java 5: http://java.sun.com/j2se/1.5.0/docs/guide/language/varargs.html
ใช่ Java อนุญาตvargs
ในพารามิเตอร์ method
public class Varargs
{
public int add(int... numbers)
{
int result = 1;
for(int number: numbers)
{
result= result+number;
} return result;
}
}