このJavaインターフェースと継承構造をGolangに変換するにはどうすればよいですか?

corgrath:

インターフェースと継承を使用するこのJava構造を慣用的なGolangの方法に書き換えることは可能ですか?

超複雑なJavaコードではありませんが、クラス継承の強さを示していますが、どういうわけか囲碁で同じ結果を達成したいと思います

Javaコード:

まず、クラスインターフェイスがあります。

public interface WebEntry {
    String perform(ConnectionData connectionData, SessionData sessionData) throws Exception;
}

どこかにウェブエントリのリストがありますWebEntry

List<WebEntry> webEntries = new ArrayList<>();
webEntries.add( new SavePasswordWebEntry() );

UserLoggedInWebEntryを実装する抽象クラスWebEntry

public abstract class UserLoggedInWebEntry implements WebEntry {

    @Override
    public String perform(ConnectionData connectionData, SessionData sessionData) throws Exception {

        // THIS IS THE LOGIC I DO NOT WANT TO DUPLICATE, HENCE ITS USING CLASS INHERITANCE
        ...

        return userPerform(User user);

    }

    protected abstract String userPerform(User user) throws Exception;

}

クラス継承を使用することで、UserLoggedInWebEntryまだ動作する作成できますWebEntry...、「ユーザーがログインしたWebエントリ」インスタンスが必要になるたびロジックを複製する必要はありません

public class SavePasswordWebEntry extends UserLoggedInWebEntry {

    @Override
    protected String userPerform(User user) throws Exception {
       ...
    }

}

つまり、全体の要点は、クラス継承を使用しているため、開発者String userPerform(User user)...in のロジックを複製せずに実装するだけでよいということUserLoggedInWebEntryです。

これはGolangでも実現できますか?もしそうなら、それはどのように見えますか?

corgrath:

「囲碁を覚えるだけ」の答えを楽しみながら、自分でも同じことを成し遂げる方法を見つけました。

関数のシグネチャuserLoggedInWebEntryを受け取り、WebEntryUserLoggedIn関数のシグネチャを返すラッパー関数作成することで解決しWebEntryます。

上記のJava継承コードと同じことを実現します。開発者がa func( user User ) string実装するだけで、ロジックuserLoggedInWebEntryは複製さません。

https://play.golang.org/p/adrk46YFIl8

package main

import (
    "fmt"
)

type ConnectionData string
type SessionData string
type User string

type WebEntry func(connectionData ConnectionData, sessionData SessionData) string
type WebEntryUserLoggedIn func( user User ) string

func main() {
    var webentries []WebEntry
    webentries = append( webentries, userLoggedInWebEntry(SavePasswordWebEntry) )

    // Test the invocation
    fmt.Println( webentries[0]("ConnectionData", "SessionData") )
}


func userLoggedInWebEntry( webEntry WebEntryUserLoggedIn ) WebEntry {

    return func(connectionData ConnectionData, sessionData SessionData) string {
        // // THIS IS THE LOGIC I DO NOT WANT TO DUPLICATE, HENCE ITS USING CLASS INHERITANCE
        var user User = "John"
        return webEntry( user )
    } 

}


func SavePasswordWebEntry( user User ) string {
    return fmt.Sprintf("user is %s", user )
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Golangで構造体データとインターフェースデータを比較するにはどうすればよいですか?

分類Dev

インターフェイスの継承-リスコフの置換原則と単一責任パターンを破らないようにするにはどうすればよいですか?

分類Dev

この例では、同じインターフェイスから継承するさまざまなオブジェクトをジェネリック型で1つの変数に格納するにはどうすればよいですか?

分類Dev

インターフェイススライスで構造体変数の値を設定するにはどうすればよいですか?

分類Dev

クラスにインターフェイスを実装し、別のクラスから継承させるにはどうすればよいですか?

分類Dev

F#でインターフェイスを継承する抽象クラスを作成するにはどうすればよいですか?

分類Dev

このインターフェイスブロックをコマンドに変換するにはどうすればよいですか

分類Dev

フラットなデータ構造をツリーのような構造に変換するにはどうすればよいですか?

分類Dev

Perlオブジェクト(クラスではない)の構造と継承履歴を取得するにはどうすればよいですか?

分類Dev

インターフェイス{}を特定の構造体として関数に渡すにはどうすればよいですか?

分類Dev

このFirebase構造のデータを取得するにはどうすればよいですか?エラー:タイプjava.util.ArrayListのオブジェクトをタイプモデルQuotationOrderに変換できません

分類Dev

インターフェイスを継承する構造体の配列は参照型のようです

分類Dev

golangが構造体をインターフェイスに変換するときに何が起こりましたか{}?コストは何ですか?

分類Dev

不明なインターフェイスで構造体の値を取得するにはどうすればよいですか{}

分類Dev

バイトスライスデータ型の構造をバイトに変換するにはどうすればよいですか?

分類Dev

Goでインターフェイスのスライス{}から構造体型のスライスに変換するにはどうすればよいですか?

分類Dev

C ++でDirectWrite継承インターフェイスにアクセスするにはどうすればよいですか?

分類Dev

Kotlinで、列挙型クラスがインターフェイスを実装するときに、継承された宣言の衝突を回避するにはどうすればよいですか?

分類Dev

インターフェース、継承、暗黙の演算子、型変換、なぜこのようになっているのですか?

分類Dev

このtunインターフェイスを停止するにはどうすればよいですか?

分類Dev

C#でGolangのインターフェースを表すにはどうすればよいですか{}?

分類Dev

Unity のインターフェイスから継承するインターフェイスを登録するにはどうすればよいですか

分類Dev

インターネットとLANの2つのインターフェイスを構成するにはどうすればよいですか?

分類Dev

フラットリストをネストされたツリーのような構造に変換するにはどうすればよいですか?

分類Dev

フェイルファストイテレータは、スロー 'ConcurrentModificationException'がスローされたときに、基になる構造が変更されていることをどのように知るようになりますか?

分類Dev

継承されるデータクラスにオプションのフィールドを作成するにはどうすればよいですか?

分類Dev

インスタンス化のために構造体のフィールドに制約を追加するにはどうすればよいですか?

分類Dev

インターフェイスを使用してさまざまな構造体を正規化するにはどうすればよいですか?

分類Dev

外部の関連タイプをローカルの構造体タイプに強制変換するにはどうすればよいですか?

Related 関連記事

  1. 1

    Golangで構造体データとインターフェースデータを比較するにはどうすればよいですか?

  2. 2

    インターフェイスの継承-リスコフの置換原則と単一責任パターンを破らないようにするにはどうすればよいですか?

  3. 3

    この例では、同じインターフェイスから継承するさまざまなオブジェクトをジェネリック型で1つの変数に格納するにはどうすればよいですか?

  4. 4

    インターフェイススライスで構造体変数の値を設定するにはどうすればよいですか?

  5. 5

    クラスにインターフェイスを実装し、別のクラスから継承させるにはどうすればよいですか?

  6. 6

    F#でインターフェイスを継承する抽象クラスを作成するにはどうすればよいですか?

  7. 7

    このインターフェイスブロックをコマンドに変換するにはどうすればよいですか

  8. 8

    フラットなデータ構造をツリーのような構造に変換するにはどうすればよいですか?

  9. 9

    Perlオブジェクト(クラスではない)の構造と継承履歴を取得するにはどうすればよいですか?

  10. 10

    インターフェイス{}を特定の構造体として関数に渡すにはどうすればよいですか?

  11. 11

    このFirebase構造のデータを取得するにはどうすればよいですか?エラー:タイプjava.util.ArrayListのオブジェクトをタイプモデルQuotationOrderに変換できません

  12. 12

    インターフェイスを継承する構造体の配列は参照型のようです

  13. 13

    golangが構造体をインターフェイスに変換するときに何が起こりましたか{}?コストは何ですか?

  14. 14

    不明なインターフェイスで構造体の値を取得するにはどうすればよいですか{}

  15. 15

    バイトスライスデータ型の構造をバイトに変換するにはどうすればよいですか?

  16. 16

    Goでインターフェイスのスライス{}から構造体型のスライスに変換するにはどうすればよいですか?

  17. 17

    C ++でDirectWrite継承インターフェイスにアクセスするにはどうすればよいですか?

  18. 18

    Kotlinで、列挙型クラスがインターフェイスを実装するときに、継承された宣言の衝突を回避するにはどうすればよいですか?

  19. 19

    インターフェース、継承、暗黙の演算子、型変換、なぜこのようになっているのですか?

  20. 20

    このtunインターフェイスを停止するにはどうすればよいですか?

  21. 21

    C#でGolangのインターフェースを表すにはどうすればよいですか{}?

  22. 22

    Unity のインターフェイスから継承するインターフェイスを登録するにはどうすればよいですか

  23. 23

    インターネットとLANの2つのインターフェイスを構成するにはどうすればよいですか?

  24. 24

    フラットリストをネストされたツリーのような構造に変換するにはどうすればよいですか?

  25. 25

    フェイルファストイテレータは、スロー 'ConcurrentModificationException'がスローされたときに、基になる構造が変更されていることをどのように知るようになりますか?

  26. 26

    継承されるデータクラスにオプションのフィールドを作成するにはどうすればよいですか?

  27. 27

    インスタンス化のために構造体のフィールドに制約を追加するにはどうすればよいですか?

  28. 28

    インターフェイスを使用してさまざまな構造体を正規化するにはどうすればよいですか?

  29. 29

    外部の関連タイプをローカルの構造体タイプに強制変換するにはどうすればよいですか?

ホットタグ

アーカイブ