List <インターフェイスを実装するオブジェクト>をメソッドに渡すにはどうすればよいですか?

ウィンドル:

クエリパラメータに渡され、DAOからオブジェクトのリストを取得し、リストをJSONに変換し、それを応答で返すサーブレットがあります。すべてのリストは、メソッドを持つオブジェクトで構成されています。

public String getAsJson(){...}

また、サーブレットには、次のようなほとんど同一のメソッドが多数あります。

private String getUserListAsJson() {
    List<User> userList = this.dao.getUsers();
    StringBuilder builder = new StringBuilder();
    builder.append('[');
    // loops over the list appending the value of each objects getAsJson()
    builder.append(']');
    return builder.toString();
}

問題は、さまざまなDAOクエリを除いて、それとまったく同じように見える約6つのメソッド(および成長中)があることです。私のアイデアは、getAsJson()メソッドの定義のみを持つインターフェースを作成し、各Beanにそれを実装させ、そのインターフェースを実装するオブジェクトを受け取る別のメソッドをサーブレットに含めることでした。このようになってしまいました:

public Interface JsonEnabled {
    public String getAsJson();
}

public class User implements JsonEnabled {
    ....
    @Override
    public String getAsJson() {...}
}

public class TheServlet {
    ...
    private String getUserListAsJson() {
        List<User> userList = this.dao.getUsers();
        return this.getListAsJson(userList);
    }
    private String getListAsJson(List<? implements JsonEnabled> list) {
        // The loop code that is in each method.
    }
}

したがって、これまでに実際に= Pを読んだことがある場合、コンパイルは行われず、Oracleからいくつかのドキュメントを調べた後、拡張のみが可能で、ジェネリックパラメータの実装ありませんgetAsJson()メソッドのみを含む抽象クラスからすべてのクラスを拡張することは、意味的に意味がありません(クラスは無関係です)。

私はSOで適切な解決策を見つけられなかったか、単にグーグルで回っていないので、ヘルプ/洞察をいただければ幸いです。

ポール・バルトリ;

一般的なワイルドカードの場合、キーワードextendsはクラスとインターフェースの両方で機能します。

private String getListAsJson(List<? extends JsonEnabled> list) { ... }

extends 一般的な境界を定義するために使用する場合、少し異なる意味があります。これは、本質的に「is、extend、またはimplements」に変換されます。

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

それを実装する具象型へのインターフェースによって表される「ジェネリック」オブジェクトのリストからキャストへの(List <?>)とはどういう意味ですか?

分類Dev

メソッドパラメータでListを渡すにはどうすればよいですか?

分類Dev

インターフェイスを実装するクラスにあるメソッドを、そのインターフェイスのタイプのオブジェクトで呼び出すにはどうすればよいですか?

分類Dev

インターフェイスのクラスを知っているだけでインターフェイスを実装するクラスのオブジェクトをメソッドに渡し、それをArrayListに追加するにはどうすればよいですか?

分類Dev

HtmlUnitメソッドでList <?>を使用するにはどうすればよいですか?

分類Dev

List <Object>をObservableList <S>とMap <T、S>に変換するジェネリックメソッドを作成するにはどうすればよいですか?

分類Dev

ジェネリックメソッド<T>()からジェネリックList<T>を返すにはどうすればよいですか

分類Dev

クラスがインターフェイスから継承されている場合、List <Interface>オブジェクトのプロパティにアクセスするにはどうすればよいですか?

分類Dev

インターフェイスを動的に実装するクラスからメソッドを取得するにはどうすればよいですか?

分類Dev

異なるタイプのlist <T>を類似のフィールドでグループ化するメソッドに渡すにはどうすればよいですか?

分類Dev

オブジェクトが実装するインターフェースとして宣言されたフィールドにymlオブジェクトをバインドするにはどうすればよいですか?

分類Dev

C#のメソッド呼び出しでオブジェクトインスタンスを渡すにはどうすればよいですか?

分類Dev

インターフェイスのデフォルトメソッドを実装するにはどうすればよいですか?

分類Dev

HttpClientResponseでListオブジェクトを取得するにはどうすればよいですか?

分類Dev

VCL TPanelなど、オブジェクトインスタンスに新しいメソッドを作成するにはどうすればよいですか。

分類Dev

未知のオブジェクトをメソッドに渡してそのタイプを判別するにはどうすればよいですか?

分類Dev

特定のオブジェクト固有のフィールドのインスタンスが渡されたときにメソッドをスタブ化するにはどうすればよいですか?

分類Dev

メソッドのパラメータとしてlist <T *>を使用するにはどうすればよいですか?

分類Dev

pybind py :: listオブジェクトを操作するにはどうすればよいですか

分類Dev

/etc/apt/sources.list.dオブジェクトを削除するにはどうすればよいですか?

分類Dev

「rectスタイルオブジェクト」とは何ですか?それをコードに実装するにはどうすればよいですか?

分類Dev

Swift-タイプ/オブジェクト(名前またはインスタンス)をメソッドに渡してから(a)タイプを取得する(b)インスタンス化するにはどうすればよいですか?

分類Dev

.extend listメソッドでリスト内包表記を使用するにはどうすればよいですか?

分類Dev

Task <T>を返すインターフェイスメソッドを実装するにはどうすればよいですか?

分類Dev

フィルタからアクションメソッドにオブジェクトを渡すにはどうすればよいですか?

分類Dev

コレクションインターフェイスの実装を返すプロジェクト内のすべてのメソッドを検索するにはどうすればよいですか?

分類Dev

List [Int]オブジェクトを並べ替えるにはどうすればよいですか?

分類Dev

Scalaでインスタンス(オブジェクト上)メソッドのHKTを定義するにはどうすればよいですか?

分類Dev

List .__ gt __()funcのソース実装を取得するにはどうすればよいですか?

Related 関連記事

  1. 1

    それを実装する具象型へのインターフェースによって表される「ジェネリック」オブジェクトのリストからキャストへの(List <?>)とはどういう意味ですか?

  2. 2

    メソッドパラメータでListを渡すにはどうすればよいですか?

  3. 3

    インターフェイスを実装するクラスにあるメソッドを、そのインターフェイスのタイプのオブジェクトで呼び出すにはどうすればよいですか?

  4. 4

    インターフェイスのクラスを知っているだけでインターフェイスを実装するクラスのオブジェクトをメソッドに渡し、それをArrayListに追加するにはどうすればよいですか?

  5. 5

    HtmlUnitメソッドでList <?>を使用するにはどうすればよいですか?

  6. 6

    List <Object>をObservableList <S>とMap <T、S>に変換するジェネリックメソッドを作成するにはどうすればよいですか?

  7. 7

    ジェネリックメソッド<T>()からジェネリックList<T>を返すにはどうすればよいですか

  8. 8

    クラスがインターフェイスから継承されている場合、List <Interface>オブジェクトのプロパティにアクセスするにはどうすればよいですか?

  9. 9

    インターフェイスを動的に実装するクラスからメソッドを取得するにはどうすればよいですか?

  10. 10

    異なるタイプのlist <T>を類似のフィールドでグループ化するメソッドに渡すにはどうすればよいですか?

  11. 11

    オブジェクトが実装するインターフェースとして宣言されたフィールドにymlオブジェクトをバインドするにはどうすればよいですか?

  12. 12

    C#のメソッド呼び出しでオブジェクトインスタンスを渡すにはどうすればよいですか?

  13. 13

    インターフェイスのデフォルトメソッドを実装するにはどうすればよいですか?

  14. 14

    HttpClientResponseでListオブジェクトを取得するにはどうすればよいですか?

  15. 15

    VCL TPanelなど、オブジェクトインスタンスに新しいメソッドを作成するにはどうすればよいですか。

  16. 16

    未知のオブジェクトをメソッドに渡してそのタイプを判別するにはどうすればよいですか?

  17. 17

    特定のオブジェクト固有のフィールドのインスタンスが渡されたときにメソッドをスタブ化するにはどうすればよいですか?

  18. 18

    メソッドのパラメータとしてlist <T *>を使用するにはどうすればよいですか?

  19. 19

    pybind py :: listオブジェクトを操作するにはどうすればよいですか

  20. 20

    /etc/apt/sources.list.dオブジェクトを削除するにはどうすればよいですか?

  21. 21

    「rectスタイルオブジェクト」とは何ですか?それをコードに実装するにはどうすればよいですか?

  22. 22

    Swift-タイプ/オブジェクト(名前またはインスタンス)をメソッドに渡してから(a)タイプを取得する(b)インスタンス化するにはどうすればよいですか?

  23. 23

    .extend listメソッドでリスト内包表記を使用するにはどうすればよいですか?

  24. 24

    Task <T>を返すインターフェイスメソッドを実装するにはどうすればよいですか?

  25. 25

    フィルタからアクションメソッドにオブジェクトを渡すにはどうすればよいですか?

  26. 26

    コレクションインターフェイスの実装を返すプロジェクト内のすべてのメソッドを検索するにはどうすればよいですか?

  27. 27

    List [Int]オブジェクトを並べ替えるにはどうすればよいですか?

  28. 28

    Scalaでインスタンス(オブジェクト上)メソッドのHKTを定義するにはどうすればよいですか?

  29. 29

    List .__ gt __()funcのソース実装を取得するにはどうすればよいですか?

ホットタグ

アーカイブ