Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Mengendalikan Tandatangan Kaedah Bercanggah dalam Pelbagai Antara Muka?

Bagaimana untuk Mengendalikan Tandatangan Kaedah Bercanggah dalam Pelbagai Antara Muka?

Linda Hamilton
Lepaskan: 2024-11-02 21:50:30
asal
217 orang telah melayarinya

How to Handle Conflicting Method Signatures in Multiple Interfaces?

Cara Melaksanakan Berbilang Antara Muka dengan Tanda Tangan Kaedah Yang Sama dalam Pakej Berbeza

Andaikan anda perlu melaksanakan antara muka yang ditakrifkan dalam pakej berasingan dengan tandatangan kaedah yang bercanggah . Ini mungkin mencabar, tetapi Go menyediakan penyelesaian.

Mari kita pertimbangkan contoh:

  • Dalam pakej A:

    package A
    
    type Doer interface {
      Do() string
    }
    
    func FuncA(doer A.Doer) {
      // Use doer.Do() here to implement functionality
    }
    Salin selepas log masuk
  • Dalam pakej B:

    package B
    
    type Doer interface {
      Do() string
    }
    
    func FuncB(doer B.Doer) {
      // Use doer.Do() here to implement functionality
    }
    Salin selepas log masuk

Dalam pakej utama anda:

package main

import (
    "path/to/A"
    "path/to/B"
)

type C int

// C implements both A.Doer and B.Doer, but the implementation of Do() aligns with A.
func (c C) Do() string {
    return "C implements both A and B"
}

func main() {
    c := C(0)
    A.FuncA(c) // Acceptable as C implements A.Doer
    B.FuncB(c) // Error, as the Do() implementation in C doesn't meet B.Doer requirements
}
Salin selepas log masuk

Penyelesaian:

Untuk menyelesaikan konflik ini, Go menawarkan pendekatan ringkas:

if _, ok := obj.(A.Doer); ok {
}
Salin selepas log masuk

Ini membolehkan anda mengesahkan sama ada objek (daripada jenis antara muka) mematuhi jenis antara muka lain (mis., A.Doer) pada masa jalan.

Walau bagaimanapun, OP menyerlahkan komplikasi selanjutnya: logik yang dilaksanakan untuk Do() dalam Pakej A dan Pakej B adalah berbeza. Untuk menangani perkara ini, buat pembalut di sekeliling objek anda:

  • DoerA dengan C sebagai medan, melaksanakan A.Do() secara logik.
  • DoerB dengan C sebagai medan, melaksanakan B. Lakukan() secara logik.

Dengan melaksanakan pembalut yang berbeza, anda boleh mengawal kaedah yang hendak digunakan berdasarkan jenis antara muka yang dijangkakan (A.Doer atau B.Doer). Ini menghapuskan keperluan untuk satu kaedah Do() pada objek C asal, yang akan bergelut untuk melaksanakan kedua-dua logik.

Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan Tandatangan Kaedah Bercanggah dalam Pelbagai Antara Muka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan