Một trường hợp thử nghiệm để minh họa điều này:
Mã Java với khai báo phương thức lấy vararg (xảy ra là tĩnh):
public class JavaReceiver {
public static String receive(String... x) {
String res = ((x == null) ? "null" : ("an array of size " + x.length));
return "received 'x' is " + res;
}
}
Mã Java này (trường hợp thử nghiệm JUnit4) gọi như trên (chúng tôi đang sử dụng trường hợp thử nghiệm không phải để kiểm tra bất kỳ thứ gì, chỉ để tạo một số đầu ra):
import org.junit.Test;
public class JavaSender {
@Test
public void sendNothing() {
System.out.println("sendNothing(): " + JavaReceiver.receive());
}
@Test
public void sendNullWithNoCast() {
System.out.println("sendNullWithNoCast(): " + JavaReceiver.receive(null));
}
@Test
public void sendNullWithCastToString() {
System.out.println("sendNullWithCastToString(): " + JavaReceiver.receive((String)null));
}
@Test
public void sendNullWithCastToArray() {
System.out.println("sendNullWithCastToArray(): " + JavaReceiver.receive((String[])null));
}
@Test
public void sendOneValue() {
System.out.println("sendOneValue(): " + JavaReceiver.receive("a"));
}
@Test
public void sendThreeValues() {
System.out.println("sendThreeValues(): " + JavaReceiver.receive("a", "b", "c"));
}
@Test
public void sendArray() {
System.out.println("sendArray(): " + JavaReceiver.receive(new String[]{"a", "b", "c"}));
}
}
Chạy điều này như một thử nghiệm JUnit mang lại:
sendNothing (): nhận được 'x' là một mảng có kích thước 0
sendNullWithNoCast (): nhận được 'x' là null
sendNullWithCastToString (): nhận được 'x' là một mảng có kích thước 1
sendNullWithCastToArray (): nhận được 'x' là null
sendOneValue (): nhận được 'x' là một mảng có kích thước 1
sendThreeValues (): đã nhận 'x' là một mảng có kích thước 3
sendArray (): nhận được 'x' là một mảng có kích thước 3
Để làm cho điều này thú vị hơn, hãy gọi receive()
hàm từ Groovy 2.1.2 và xem điều gì sẽ xảy ra. Hóa ra là kết quả không giống nhau! Đây có thể là một lỗi.
import org.junit.Test
class GroovySender {
@Test
void sendNothing() {
System.out << "sendNothing(): " << JavaReceiver.receive() << "\n"
}
@Test
void sendNullWithNoCast() {
System.out << "sendNullWithNoCast(): " << JavaReceiver.receive(null) << "\n"
}
@Test
void sendNullWithCastToString() {
System.out << "sendNullWithCastToString(): " << JavaReceiver.receive((String)null) << "\n"
}
@Test
void sendNullWithCastToArray() {
System.out << "sendNullWithCastToArray(): " << JavaReceiver.receive((String[])null) << "\n"
}
@Test
void sendOneValue() {
System.out << "sendOneValue(): " + JavaReceiver.receive("a") << "\n"
}
@Test
void sendThreeValues() {
System.out << "sendThreeValues(): " + JavaReceiver.receive("a", "b", "c") << "\n"
}
@Test
void sendArray() {
System.out << "sendArray(): " + JavaReceiver.receive( ["a", "b", "c"] as String[] ) << "\n"
}
}
Chạy điều này như một bài kiểm tra JUnit cho kết quả như sau, với sự khác biệt so với Java được tô đậm.
sendNothing (): nhận được 'x' là một mảng có kích thước 0
sendNullWithNoCast (): nhận được 'x' là null
sendNullWithCastToString (): nhận được 'x' là null
sendNullWithCastToArray (): nhận được 'x' là null
sendOneValue (): nhận được 'x' là một mảng có kích thước 1
sendThreeValues (): đã nhận 'x' là một mảng có kích thước 3
sendArray (): nhận được 'x' là một mảng có kích thước 3
asList
phương pháp trong mẫu và mục đích của nó.