Câu hỏi này gần như là một bản sao của: Scala can't multiply java Doubles? - bạn có thể nhìn vào my answer là tốt, như ý tưởng tương tự.
Như Eastsun đã gợi ý, câu trả lời là một ngầm chuyển đổi từ một java.lang.Integer
(cơ bản là một đóng hộp int
nguyên thủy) vào một scala.Int
, đó là cách Scala đại diện cho JVM số nguyên nguyên thủy.
implicit def javaToScalaInt(d: java.lang.Integer) = d.intValue
Và khả năng tương tác đã đạt được - mã bạn đã cho nên biên dịch tốt! Và mã sử dụng scala.Int
trong đó java.lang.Integer
là cần thiết dường như chỉ hoạt động tốt do tự động đóng hộp. Vì vậy, các công trình sau đây:
def foo(d: java.lang.Integer) = println(d)
val z: scala.Int = 1
foo(z)
Ngoài ra, như michaelkebe nói, không sử dụng các loại Integer
- mà thực chất là viết tắt cho scala.Predef.Integer
vì nó bị phản đối và có lẽ hầu hết sẽ được loại bỏ trong Scala 2.8.
EDIT: Rất tiếc ... đã quên trả lời lý do. Lỗi bạn nhận được có lẽ là scala.Predef.Integer
đã cố gắng bắt chước đường cú pháp của Java, trong đó a + "my String"
có nghĩa là nối chuỗi, a
là int
. Do đó, phương thức +
trong loại scala.Predef.Integer
chỉ thực hiện chuỗi nối (mong đợi loại String
) và không thêm số nguyên tự nhiên.
- Flaviu Cipcigan
Nguồn
2009-10-14 15:49:21