2012-01-28 37 views
13

Tôi muốn chạy một chút Java trong giao diện điều khiển Scala. Dưới đây là những gì tôi nhận được:Scala không thể nhận ra phương thức nào để gọi

scala> String.format("hello %d",3); 
<console>:8: error: overloaded method value format with alternatives: 
    (java.util.Locale,java.lang.String,<repeated...>[java.lang.Object])java.lang.String <and> 
    (java.lang.String,<repeated...>[java.lang.Object])java.lang.String 
cannot be applied to (java.lang.String, Int) 
       String.format("hello %d",3); 

Tại sao Scala không thể nhận ra phương thức để gọi, nếu bộ đối số khác và những phương thức tôi cung cấp khá rõ ràng?

Điều kỳ lạ, cùng một thông báo cũng xuất hiện khi tôi cố gọi hàm bằng các đối số không khớp với bất kỳ bộ đối số nào, ví dụ: String.format()

Tôi đã sử dụng scala 2.9.1

Trả lời

13

lập luận của bạn không phù hợp với chức năng nguyên mẫu. Bạn đang gọi hàm với đối số thứ hai scala.Int không phải là java.lang.Object.

Chuyển đổi thành java.lang.Integer và nó sẽ hoạt động.

Xem thêm boxing and unboxing in Scala.

+0

liên kết mà là ném một 404 –

0

Ngoài ra, bạn có thể cho Scala làm boxing dành cho bạn:

String.format("hello %d", 3: Integer) 
1

Hãy thử

String.format("hello %d",3.asInstanceOf[java.lang.Object]); 
+1

-1: Duplicate câu trả lời. – sschaef

7

Tôi khuyên bạn nên sử dụng interpolators new String sẵn trong Scala 2.10.X. Chúng dễ sử dụng hơn.

val x = 3 
    String.format("hello %d", x: Integer) 

sẽ chỉ đơn giản là:

val x =3 
    s"hello $x" 
Các vấn đề liên quan