ドット演算子を使用してジェネリックリストにアクセスするJavaの奇妙なメソッド呼び出し

馬の声:

私はいくつかの高度なJavaコードに遭遇しました(私にとっては高度です:))理解の助けが必要です。

クラスには、次のようなネストされたクラスがあります。

private final class CoverageCRUDaoCallable implements
        Callable<List<ClientCoverageCRU>>
{
    private final long oid;
    private final long sourceContextId;

    private CoverageCRUDaoCallable(long oid, long sourceContextId)
    {
        this.oid = oid;
        this.sourceContextId = sourceContextId;
    }

    @Override
    public List<ClientCoverageCRU> call() throws Exception
    {
        return coverageCRUDao.getCoverageCRUData(oid, sourceContextId);
    }
}

後で外部クラスに、作成される呼び出し可能クラスのインスタンスがあります。これが何であるか私にはわかりません:

ConnectionHelper.<List<ClientCoverageCRU>> tryExecute(coverageCRUDaoCallable);

私には、Java構文のようには見えません。この不可解な構文で何が起こっているのか詳しく説明していただけませんか?以下のコードの抜粋で使用されていることがわかります。

CoverageCRUDaoCallable coverageCRUDaoCallable = new CoverageCRUDaoCallable(
        dalClient.getOid(), sourceContextId);

// use Connection helper to make coverageCRUDao call.
List<ClientCoverageCRU> coverageCRUList = ConnectionHelper
        .<List<ClientCoverageCRU>> tryExecute(coverageCRUDaoCallable);

EDITEDはConnectionHelperクラスを追加しました。

public class ConnectionHelper<T>
{
    private static final Logger logger =
        LoggerFactory.getLogger(ConnectionHelper.class);

    private static final int    CONNECTION_RETRIES = 3;

    private static final int    MIN_TIMEOUT        = 100;

    public static <T> T tryExecute(Callable<T> command)
    { 
        T returnValue = null;
        long delay = 0;

        for (int retry = 0; retry < CONNECTION_RETRIES; retry++)
        { 
            try
            { 
                // Sleep before retry
                Thread.sleep(delay);

                if (retry != 0)
                {
                    logger.info("Connection retry #"+ retry);
                }

                // make the actual connection call
                returnValue = command.call();
                break;

            } 
            catch (Exception e)
            {
                Throwable cause = e.getCause();
                if (retry == CONNECTION_RETRIES - 1)
                {
                    logger.info("Connection retries have exhausted. Not trying "                        
                            + "to connect any more.");

                    throw new RuntimeException(cause);
                }

                // Delay increased exponentially with every retry.
                delay = (long) (MIN_TIMEOUT * Math.pow(2, retry));

                String origCause = ExceptionUtils.getRootCauseMessage(e);

                logger.info("Connection retry #" + (retry + 1)
                        + " scheduled in " + delay + " msec due to "
                        + origCause);
                        + origCause);
            }
        }
        return returnValue;
    }
クリス・マーティン:

クラスはジェネリックであると考えることがよくありますが、メソッドもジェネリックにすることができます。一般的な例はArrays.asListです。

ほとんどの<...>場合、ジェネリックメソッドを呼び出す場合でも、山括弧を使用した構文を使用する必要はありません。これは、Javaコンパイラが実際に状況によっては基本的な型推論を行うことができる場所だからです。 。たとえば、Arrays.asListドキュメントに記載されているスニペットではタイプが省略されています。

List<String> stooges = Arrays.asList("Larry", "Moe", "Curly");

しかし、これはジェネリック型が明示的に指定されているこのバージョンと同等です。

List<String> stooges = Arrays.<String>asList("Larry", "Moe", "Curly");

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

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

編集
0

コメントを追加

0

関連記事

オブジェクトのリストでドット演算子を使用してメソッドを呼び出す

byte []をジェネリックオブジェクトに逆シリアル化してメソッド呼び出しでキャストする方法

非ジェネリック入力のリストを使用してジェネリックメソッドを呼び出す方法

Scalaのジェネリックスを使用してJava静的メソッドを呼び出す

ジェネリック型にキャストしてdoubleValue()メソッドを呼び出す

ネストされたジェネリック型を使用したメソッドの呼び出し

リストからカスタムオブジェクトを使用してジェネリックメソッドを呼び出す(自動)

オブジェクトのリストに対して同じメソッドを呼び出す方法は?

ジェネリックスを使用して、メソッド呼び出しで親から子にキャストします

ジェネリッククラスでジェネリックリターンを使用してメソッドを呼び出すことが、javacによって安全でないと見なされるのはなぜですか?

ジェネリックパラメーターを使用してサブクラスメソッドからコンストラクターを呼び出す

リスト内のすべてのオブジェクトでメソッドを呼び出しますか?

Javaジェネリックメソッドの呼び出し

Javaジェネリックメソッドの呼び出し

Javaリフレクションを使用して匿名クラスのメソッドを呼び出すときに例外にアクセスする

ジェネリック引数に2つの可能な制約セットを使用してジェネリックメソッドを作成する

ジェネリックトレイトメソッド呼び出しを明確にする方法は?

ストリームAPIを使用して各オブジェクトのメソッドを呼び出す「良い」メソッド

'is'演算子を使用してクラスのインスタンスを検索するためのジェネリックメソッド

ジェネリッククラスの静的メソッド呼び出しで<T>を使用する必要があるのはなぜですか

Pythonで親クラス変数にアクセスし、子オブジェクトを使用して親メソッドを呼び出す方法

ジェネリックトレイトを拡張するクラスでパラメータ `this`を使用してメソッドを呼び出せないのはなぜですか?

ジェネリックス-ジェネリックパラメーターを使用してメソッドを呼び出す

Java:ジェネリックス:ジェネリックメソッドからT型のオブジェクトを取得し、そのメソッドにアクセスする

ジェネリッククラスが呼び出しメソッドにすべてのプロパティの値を返さない

式を使用したジェネリッククラスのC#高速化メソッド呼び出し

ジェネリック型の正しいファクトリメソッドを呼び出す方法は?

Javascriptメソッドから呼び出し元オブジェクトにアクセスする

制約されたジェネリック引数を使用した奇妙なメソッドのオーバーロード解決:常に呼び出される基本クラスargを使用したオーバーロード

TOP 一覧

  1. 1

    Unity:未知のスクリプトをGameObject(カスタムエディター)に動的にアタッチする方法

  2. 2

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  3. 3

    Ansibleで複数行のシェルスクリプトを実行する方法

  4. 4

    tkinterウィンドウを閉じてもPythonプログラムが終了しない

  5. 5

    Crashlytics:コンパイラー生成とはどういう意味ですか?

  6. 6

    GoDaddyでのCKEditorとKCfinderの画像プレビュー

  7. 7

    Windows 10 Pro 1709を1803、1809、または1903に更新しますか?

  8. 8

    Chromeウェブアプリのウェブビューの高さの問題

  9. 9

    モーダルダイアログを自動的に閉じる-サーバーコードが完了したら、Googleスプレッドシートのダイアログを閉じます

  10. 10

    Windows 10の起動時間:以前は20秒でしたが、現在は6〜8倍になっています

  11. 11

    Reactでclsxを使用する方法

  12. 12

    ファイル内の2つのマーカー間のテキストを、別のファイルのテキストのセクションに置き換えるにはどうすればよいですか?

  13. 13

    MLでのデータ前処理の背後にある直感

  14. 14

    グラフからテーブルに条件付き書式を適用するにはどうすればよいですか?

  15. 15

    Pythonを使用して同じ列の同じ値の間の時差を取得する方法

  16. 16

    mutate_allとifelseを組み合わせるにはどうすればよいですか

  17. 17

    ネットワークグラフで、ネットワークコンポーネントにカーソルを合わせたときに、それらを強調表示するにはどうすればよいですか?

  18. 18

    テキストフィールドの値に基づいて UIslider を移動します

  19. 19

    BLOBストレージからデータを読み取り、Azure関数アプリを使用してデータにアクセスする方法

  20. 20

    PowerShellの分割ファイルへのヘッダーの追加

  21. 21

    ソートされた検索、ターゲット値未満の数をカウント

ホットタグ

アーカイブ