Nói rằng tôi có:Lý do cú pháp tham số kiểu này không biên dịch là gì?
class Class[CC[A, B]]
class Thing[A, B <: Int]
class Test extends Class[Thing] // compile error here
tôi nhận được lỗi biên dịch:
kinds of the type arguments (cspsolver.Thing) do not conform to the expected kinds of the type parameters (type CC) in class Class. cspsolver.
Thing's type parameters do not match type CC's expected parameters: type C's bounds <: Int are stricter than type B's declared bounds >: Nothing <: Any
Tuy nhiên khi tôi thay đổi mã như vậy mà nó trông như thế này:
class Class[CC[A, B]]
class Thing[A, B] {
type B <: Int
}
class Test extends Class[Thing]
nó biên dịch tốt. Cả hai đều không có chức năng tương đương?
Trong ví dụ cuối cùng, bạn có tham số kiểu 'B' và nhập thành viên' B'. Họ có cùng tên (vì vậy chỉ có một là có thể nhìn thấy), bot họ không giống nhau. – senia
@senia, có trường hợp sử dụng cùng một tên hữu ích không? – huynhjl
@huynhjl: Tôi đoán là không. Nhưng trong một số trường hợp, việc che bóng có ích: bạn có thể sử dụng lại tên. Ngoài ra còn có một số lạm dụng hữu ích một phần của việc che giấu trong trường hợp có liên quan: xem [câu trả lời này] (http://stackoverflow.com/a/17852226/406435). – senia