Bởi vì [ "[email protected]"] kết quả là một ArrayList, không phải là một mảng:
groovy:000> o = ["asdf"]
===> [asdf]
groovy:000> o.getClass()
===> class java.util.ArrayList
OTOH khai của bạn tạo một mảng các Đối tượng:
groovy:000> Object[] args = ["asdf"]
===> [Ljava.lang.Object;@14e113b
và t phương pháp mà anh đang gọi cần một mảng. Bạn có thể tạo một mảng sử dụng as
:
Object[] args = ["asdf"] as Object[]
Những người sáng tạo Groovy thực hiện một điểm làm cho cấu trúc dữ liệu cấp cao hơn như danh sách thành ngữ, trong khi mảng có mặt cho khả năng tương tác với Java.
Trong cuộc phỏng vấn của mình trong Coders tại nơi làm việc Guy Steele nói về sự lựa chọn thực hiện trong việc thiết kế một ngôn ngữ:.
"Có mã hóa vấn đề Huffman này Nếu bạn thực hiện một cái gì đó ngắn gọn, một cái gì đó đang xảy ra để phải Vì vậy, trong việc thiết kế một ngôn ngữ, một trong những điều bạn nghĩ là, ' điều gì tôi muốn làm rất dễ nói và rất dễ để có được phải không?' Nhưng với sự hiểu biết rằng, có sử dụng ký tự hoặc biểu tượng cho mục đích đó, bạn sẽ phải làm một cái gì đó khác khó hơn một chút để nói. "
Dường như Groovy tạo danh sách ngắn gọn hơn, với hiệu ứng phụ khiến mảng trở nên tiết kiệm hơn.
Nguồn
2009-12-21 17:25:52
có ý nghĩa, nhưng dường như làm cho phương pháp một rắc rối để sử dụng, tôi đoán tôi mong đợi nó để được nhiều hơn "groovy" –
Bạn có thể thay đổi nó để ["[email protected]"]. toArray(). Không tốt hơn nhiều nhưng ít nhất là nội tuyến. –