- Siêu lớp và danh mục iOS/Objective-C
- object-c - -1001 lỗi khi NSURLSession vượt qua httpproxy và /etc/hosts
- java - Nhận địa chỉ url bằng lớp mạng
- ios - Âm thanh không phát trong thông báo đẩy
Tôi có lớp sau trong Java:
lớp công khai GeneralClass {
số nguyên công khai getInt(Double d) {
trả về d.intValue();
}
}
Tôi muốn mở rộng lớp này trong scala như
nhập scala.collection.JavaConversions._
nhập scala.collection.JavaConverters._
lớp SpecialClass mở rộng GeneralClass {
ghi đè def getInt(d: Double): Int = {
d.intValue()
}
}
Vấn đề là cả scala.Double và scala.Int đều không được tự động chuyển đổi sang các loại java tương ứng.
biên tậpThông báo lỗi là:
phương thức getInt không ghi đè gì. Lưu ý: các siêu lớp của lớp SpecialClass chứa các thành viên không phải cuối cùng sau đây có tên getInt: def getInt(d: Double): Số nguyên.
Bất cứ ai có thể giải thích điều này và có thể chỉ ra một giải pháp tao nhã?
câu trả lời hay nhất
getInt
hiện hữu Lớp chuyên ngành
sẽ không che đậy Lớp chung
Các phương thức trong. Để có thể ghi đè,Lớp chuyên ngành
Các tham số của hàm phải trái ngược nhau và kiểu trả về phải là hiệp biến. Không phải trong trường hợp của bạn.
Vì vậy trừ khi bạn getInt
Có cái gì đó ở trong đó Lớp chuyên ngành
nó cần loại T :> java.lang.Double
Kiểu trả về là T <: java.lang.Integer
, nó sẽ không ghi đè lên nó.
Về câu hỏi của bạn, tôi thực sự không nghĩ rằng phương pháp như vậy là cần thiết vì trình biên dịch Scala sẽ ngầm chuyển đổi Java double thành Scala Double.
Về java - chuyển đổi ngầm, ghi đè, khả năng tương tác, chúng tôi tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/17319756/
Tôi là một lập trình viên xuất sắc, rất giỏi!