2014-05-22 17 views
6

Tôi có nhiều phương pháp mà trả về một java.lang.Integer, sau đó được ngầm chuyển đổi thành một Int sử dụng Predef chuyển đổi tiềm ẩn của Scala, đây là cách nó được viết there:Override chuyển đổi tiềm ẩn Predef của

implicit def Integer2int(x: java.lang.Integer): Int = x.intValue 

này chuyển đổi không được thỏa mãn với tôi, tôi muốn một cái gì đó dọc theo dòng:

implicit def Integer2int(x: java.lang.Integer): Int = 
    Option(x).getOrElse(new Integer(0)).intValue 

như Integer đôi khi có thể null và trong trường hợp đó lợi nhuận chuyển đổi ngầm Predef của thành vô giá trị và tôi cũng sẽ l thay vào đó là 0.

Tôi đã viết chuyển đổi của riêng mình nhưng tôi vẫn nhận được lỗi nói rằng tuyên bố này là mơ hồ vì nó đã được khai báo trong Predef.

Câu hỏi của tôi là, có cách nào thực sự ghi đè chuyển đổi tiềm ẩn của Predef không?

Trả lời

7

Bạn có thể vô hiệu hóa việc nhập khẩu Predef như thế này:

import scala.Predef.{Integer2int => _} 

Và sau đó chỉ cần xác định lại Integer2int như bạn muốn.

bằng chứng chants: http://ideone.com/R7Zyfd

+3

này hoạt động tốt, chỉ là một nhận xét: Khi làm việc nhập khẩu bên trong một đối tượng, những gì bạn đề nghị công trình, tuy nhiên, nếu bạn cần phải làm điều này bên ngoài một đối tượng, bạn cần phải viết nó theo cách này: 'import scala.Predef. {Integer2int => _, _}' – Peter

+0

@Peter, bạn nói đúng, đó là một nhận xét quan trọng. – tkroman

Các vấn đề liên quan