Giả sử rằng tôi phải triển khai hai giao diện khác nhau được khai báo trong hai gói khác nhau (trong hai dự án riêng biệt khác nhau).Cách triển khai hai giao diện khác nhau với cùng một chữ ký phương thức
tôi có trong gói A
package A
type interface Doer {
Do() string
}
func FuncA(Doer doer) {
// Do some logic here using doer.Do() result
// The Doer interface that doer should implement,
// is the A.Doer
}
Và trong gói B
package B
type interface Doer {
Do() string
}
function FuncB(Doer doer) {
// some logic using doer.Do() result
// The Doer interface that doer should implement,
// is the B.Doer
}
Trong main
gói của tôi
package main
import (
"path/to/A"
"path/to/B"
)
type C int
// this method implement both A.Doer and B.Doer but
// the implementation of Do here is the one required by A !
func (c C) Do() string {
return "C now Imppement both A and B"
}
func main() {
c := C(0)
A.FuncA(c)
B.FuncB(c) // the logic implemented by C.Do method will causes a bug here !
}
Làm thế nào để đối phó với tình huống này?
Hoàn toàn không có gì để xử lý: ** Bất kỳ loại ** nào có phương thức 'Do() string' thực hiện * cả hai giao diện' A.Doer' và 'B.Doer'. – Volker
Tôi nghĩ rằng bạn là đúng @Volker, không có sửa chữa cho điều đó, và tình trạng này có thể xảy ra trong bất kỳ ngôn ngữ có sử dụng giao diện ('java' ví dụ). – tarrsalah