目次
それは問題ではありません、マニホールドは言いました:「それは問題ではありません、私は行動を起こします。」 Manifold に基づいて静的メソッドを拡張するには、拡張クラスの静的メソッドに @Extension を追加します。
ホームページ Java &#&チュートリアル Java に不足している機能拡張メソッドは何ですか

Java に不足している機能拡張メソッドは何ですか

May 20, 2023 pm 04:58 PM
java

    #拡張メソッドとは何ですか?

    拡張メソッドとは、既存の型にメソッドを直接「追加」する機能です。新しい派生型の作成、再コンパイル、または既存の型の変更。拡張メソッドを呼び出す場合、型で実際に定義されたメソッドを呼び出す場合と比べて、目立った違いはありません。

    拡張メソッドが必要な理由

    この機能の実装を検討してください。Redis から複数のプロダクト ID を含む文字列 (各プロダクト ID は英語のカンマで区切られています) を取り出した後、最初にプロダクト ID を比較します。重複を削除し (要素の順序を維持し)、最後にカンマを使用して製品 ID を接続します。

    従来の書き込みメソッド:

    ストリーム書き込みメソッドを使用:

    拡張メソッドは Java で実装できると仮定し、配列の拡張メソッドを List に追加します (配列を List に変換)、List の拡張メソッド toSet (List を LinkedHashSet に変換)、および Collection の拡張メソッド join (指定されたコネクタを使用してコレクション内の要素の文字列形式を接続する) を追加すると、次のことが可能になります。次のようなコードを記述します:

    この時点で拡張メソッドが必要な理由についてはすでに答えがあると思います:

    ツール クラスを使用する代わりに、既存のクラス ライブラリを直接拡張できます

    比較 ツール クラスを使用し、その型自体のメソッドを使用してコードをよりスムーズかつ快適に記述します。

    静的メソッドのネスト ドールを使用するのではなくチェーン呼び出しであるため、コードが読みやすくなります

    Java 拡張メソッドでの実装方法
    まず、最近人気のある ChatGPT について聞いてみましょう:

    Java に不足している機能拡張メソッドは何ですか

    ChatGPT の見解は、Java では次のとおりです。拡張メソッドは、静的メソッドによって実装されたツール クラスを通じて提供されます。次に、まったく新しいブラック テクノロジを紹介します。

    Manifold

    準備条件

    Manifold と Lombok は同様に機能し、どちらも処理されるアノテーション プロセッサを通じてコン​​パイルされます。 Manifold を効果的に使用するには、IDEA

    に Manifold IDEA プラグインをインストールし、プロジェクト pom:

    の maven-compiler-plugin に annotationProcessorPaths を追加する必要があります。プロジェクト内の Lombok は、annotationProcessorPaths に追加する必要があります。

    拡張メソッドの記述

    JDK では、String の Split メソッドはパラメーターとして文字列を使用します。つまり、String[] Split です。 (弦)。次に、拡張メソッド String[] Split(char) を String: Split by Givencharacters に追加しましょう。

    Manifold に基づいて拡張メソッドを作成します:

    本質的にツール クラスである静的メソッドを見つけることができますが、いくつかの要件があります:

    ツール クラスは Manifold の @ を使用する必要があります。拡張子の注釈

    静的メソッドでは、ターゲット型のパラメータに @This の注釈を付ける必要があります

    ツール クラスが配置されているパッケージ名は拡張子で終わる必要があります。完全修飾クラス対象の型の名前

    ——C#を使ったことのある学生なら思わずニヤリとしてしまうかもしれませんが、これはC#を模倣した拡張方法です。

    ポイント 3 に関して、この要件の理由は、Manifold がプロジェクト内の拡張メソッドを迅速に見つけ、プロジェクト内のすべてのクラスの注釈スキャンを回避し、処理効率を向上させることを望んでいることです。

    メソッドを拡張できるようになったので、次のように呼び出すことができます:

    素晴らしい!そして、 System.out.println(numStrs.toString()) が実際には配列オブジェクトのアドレスではなく、配列オブジェクトの文字列形式を出力していることがわかります。逆コンパイルされた App.class を参照し、拡張メソッド呼び出しが静的メソッド呼び出し

    Java に不足している機能拡張メソッドは何ですか

    に置き換えられ、配列の toString メソッドが Manifold を使用して配列拡張機能を定義していることを確認します。 Method ManArrayExt.toString(@This Object array):

    Java に不足している機能拡張メソッドは何ですか

    [Ljava.lang.String;@511d50c0 何、さようなら、二度と会わないね~

    Manifold の拡張メソッドを使用すると、拡張メソッドの呼び出しはコンパイル時に静的メソッドの呼び出しに置き換えられるため、呼び出しメソッドのオブジェクトが null であっても、処理されたコードは対応する静的メソッドにパラメーターとして null を渡すため、問題はありません。たとえば、コレクションを拡張するには:

    その後、呼び出し時:

    java.lang.NullPointerException、さようなら、二度と会うことはありません~

    配列拡張メソッド

    Java に不足している機能拡張メソッドは何ですか

    List は次のように記述されています: @Self は、注釈付きの値がどのような型であるかを示すために使用されます。@Self の場合、つまり @Self(false) は、注釈付きの値。値は @This 注釈の値と同じ型です。@Self(true) は配列内の要素の型を示します。

    オブジェクト配列の場合、toList メソッドが対応するリスト (T は配列要素の型) を返すことがわかります。元の Type 配列、IDEA によって示される戻り値は次のとおりです:

    Java に不足している機能拡張メソッドは何ですか

    しかし、私は Java を使用しています。消去メソッド ジェネリックスに List のような優れた機能があるのはなぜですか - それで、次のようになります。この戻り値を受け取るには、ネイティブ型のみを使用してください:)

    Java に不足している機能拡張メソッドは何ですか

    ##—— Project Valhalla がすぐにリリースされることを願って願います。

    さまざまなプロジェクトで、誰もが最初にオブジェクトを Optional にパッケージ化し、次にフィルターやマップなどを実行することがよくあります。 @Self の型マッピングを使用すると、次のように非常に実用的なメソッドを Object に追加できます。

    Java に不足している機能拡張メソッドは何ですか これにより、すべてのオブジェクトが asOpt() メソッドを持つようになります。

    以前は不自然にラップする必要があったのに比べて:

    今では Optional を自然に使用できるようになりました:

    もちろん、Object はすべてのクラスの親クラスなので、依然としてそれを行うことが適切かどうかを慎重に検討する必要があります。

    拡張静的メソッド

    Java9 がコレクションにファクトリ メソッドを追加していることは誰もが知っています:

    羨ましいですか? Java 9 以降を使用していない場合 (Java 8: ID カードを見せてください)、Guava のようなライブラリを使用する必要がありますが、ImmutableList.of は使用されている List.of ほど優れていません。 。

    それは問題ではありません、マニホールドは言いました:「それは問題ではありません、私は行動を起こします。」 Manifold に基づいて静的メソッドを拡張するには、拡張クラスの静的メソッドに @Extension を追加します。

    そうすれば、Java8 以降のバージョンを使用するように自分を騙すことができます。やりたいことは何でもできます。私は Java8 を使用しています。

    ところで、Object はすべてのクラスの親クラスであるため、静的拡張メソッドを Object に追加すると、インポートすることなくどこからでもこの静的メソッドに直接アクセスできるようになります。おめでとうございます。ロックが解除されました。 「トップ機能」。

    以上がJava に不足している機能拡張メソッドは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

    ホットAIツール

    Undresser.AI Undress

    Undresser.AI Undress

    リアルなヌード写真を作成する AI 搭載アプリ

    AI Clothes Remover

    AI Clothes Remover

    写真から衣服を削除するオンライン AI ツール。

    Undress AI Tool

    Undress AI Tool

    脱衣画像を無料で

    Clothoff.io

    Clothoff.io

    AI衣類リムーバー

    AI Hentai Generator

    AI Hentai Generator

    AIヘンタイを無料で生成します。

    ホットツール

    メモ帳++7.3.1

    メモ帳++7.3.1

    使いやすく無料のコードエディター

    SublimeText3 中国語版

    SublimeText3 中国語版

    中国語版、とても使いやすい

    ゼンドスタジオ 13.0.1

    ゼンドスタジオ 13.0.1

    強力な PHP 統合開発環境

    ドリームウィーバー CS6

    ドリームウィーバー CS6

    ビジュアル Web 開発ツール

    SublimeText3 Mac版

    SublimeText3 Mac版

    神レベルのコード編集ソフト(SublimeText3)

    Javaの平方根 Javaの平方根 Aug 30, 2024 pm 04:26 PM

    Java の平方根のガイド。ここでは、Java で平方根がどのように機能するかを、例とそのコード実装をそれぞれ示して説明します。

    Javaの完全数 Javaの完全数 Aug 30, 2024 pm 04:28 PM

    Java における完全数のガイド。ここでは、定義、Java で完全数を確認する方法、コード実装の例について説明します。

    Javaのアームストロング数 Javaのアームストロング数 Aug 30, 2024 pm 04:26 PM

    Java のアームストロング番号に関するガイド。ここでは、Java でのアームストロング数の概要とコードの一部について説明します。

    Java の乱数ジェネレーター Java の乱数ジェネレーター Aug 30, 2024 pm 04:27 PM

    Java の乱数ジェネレーターのガイド。ここでは、Java の関数について例を挙げて説明し、2 つの異なるジェネレーターについて例を挙げて説明します。

    ジャワのウェカ ジャワのウェカ Aug 30, 2024 pm 04:28 PM

    Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

    Javaのスミス番号 Javaのスミス番号 Aug 30, 2024 pm 04:28 PM

    Java のスミス番号のガイド。ここでは定義、Java でスミス番号を確認する方法について説明します。コード実装の例。

    Java Springのインタビューの質問 Java Springのインタビューの質問 Aug 30, 2024 pm 04:29 PM

    この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

    Java 8 Stream Foreachから休憩または戻ってきますか? Java 8 Stream Foreachから休憩または戻ってきますか? Feb 07, 2025 pm 12:09 PM

    Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

    See all articles