ホームページ Java &#&チュートリアル Java での静的ファクトリ メソッドの使用方法の詳細な説明

Java での静的ファクトリ メソッドの使用方法の詳細な説明

Sep 09, 2017 pm 01:11 PM
java 工場 方法

この記事では主に Java 静的ファクトリ メソッドの詳細な説明に関する関連情報を紹介します。この記事を通じて、今日から Java ファクトリ メソッドをマスターできることを願っています。必要な方は

Java 静的ファクトリ メソッドの詳細な例を参照してください。

静的ファクトリメソッドとは

クラスの場合、ユーザーがそれ自体のインスタンスを取得するために、最も一般的な方法はパブリックコンストラクターを提供することです。
もちろん、ここで紹介したいのは別のメソッドです。それは、クラスのインスタンスを返す静的メソッドである静的ファクトリー メソッドです。
たとえば、基本型 boolean をカプセル化されたクラスに変換する Boolean のメソッド、valueOf:


public static Boolean valueOf(boolean b) { 
  return (b ? TRUE : FALSE); 
}
ログイン後にコピー

静的ファクトリ メソッドを使用する理由

それでは、なぜ静的ファクトリ メソッドを使用するのでしょうか。なぜコンストラクターを使用しないのでしょうか?

静的ファクトリ メソッドには、名前付き、環境に優しい、複数の子という 3 つの特性があるため、以下でそれぞれについて説明します。

> 名前付き静的ファクトリメソッドには名前があります

コンストラクターの場合、異なる入力パラメーターに応じて複数のコンストラクターが存在する可能性がありますが、ユーザーが呼び出すとき、これらのコンストラクターの名前はすべて同じであるため、混乱するでしょう。どちらに電話すべきか。


静的ファクトリーメソッドを使用した後は、その機能に応じてメソッドにさまざまな名前を付けることができます。名前が適切に選択されていれば、ユーザーはメソッド名を見たときにその名前が何を意味するのかがわかり、どのメソッドを使用すべきかがわかります。この時点で が呼び出され、コードの可読性が大幅に向上します。

> 環境に優しい

を呼び出すたびに新しいオブジェクトを作成する必要はありません。コンストラクターを使用すると、毎回新しいオブジェクトが生成されます。


静的ファクトリ メソッドは、事前に作成されたオブジェクトを繰り返し返すことができます。


上記のブール値は非常に良い例です。TRUE 変数と FALSE 変数は両方とも事前に作成されており、それを使用する必要がある人は、変更されることを気にせずにそれを返すことができます。


以下は、2 つの変数 TRUE と FALSE の初期化コードです:



public final class Boolean implements java.io.Serializable, 
                   Comparable<Boolean> 
{ 
  /** 
   * The {@code Boolean} object corresponding to the primitive 
   * value {@code true}. 
   */ 
  public static final Boolean TRUE = new Boolean(true); 
 
  /** 
   * The {@code Boolean} object corresponding to the primitive 
   * value {@code false}. 
   */ 
  public static final Boolean FALSE = new Boolean(false); 
 
  ...   
}
ログイン後にコピー

> 複数のサブタイプは、元の戻り値の型の任意のサブタイプのオブジェクトを返すことができます

コンストラクターを使用すると、次のことができます。型のオブジェクトのみを返します。静的ファクトリ メソッドでは、必要に応じて元の戻り値の型のサブタイプのオブジェクトを返すことができます。

EnumSet の noneof メソッドを例に挙げます。


/** 
 * Creates an empty enum set with the specified element type. 
 * 
 * @param elementType the class object of the element type for this enum 
 *   set 
 * @throws NullPointerException if <tt>elementType</tt> is null 
 */ 
public static <E extends Enum<E>> EnumSet<E> noneOf(Class<E> elementType) { 
  Enum[] universe = getUniverse(elementType); 
  if (universe == null) 
    throw new ClassCastException(elementType + " not an enum"); 
 
  if (universe.length <= 64) 
    return new RegularEnumSet<>(elementType, universe); 
  else 
    return new JumboEnumSet<>(elementType, universe); 
}
ログイン後にコピー
パフォーマンス上の理由から、返される特定の型は列挙型の数によって決まります。64 を超える場合は JumboEnumSet を返し、それ以外の場合は RegularEnumSet を返します。これら 2 つのタイプはユーザーには表示されません。ユーザーは、これらが EnumSet であることだけを認識する必要があります。

それは、静的ファクトリ メソッドがコンストラクターよりも優れているためです。クラスを作成するとき、最初に行うべきはパブリック コンストラクターを提供することではなく、静的ファクトリ メソッドを優先する必要があります。

一般的な静的ファクトリ メソッド名

静的ファクトリ メソッドの従来の名前をいくつか示します。


valueOf/Of - 型変換、返されるインスタンスと入力パラメータは同じ値になります (Boolean など)。 ), EnumSet.valueOf()

getInstance - 事前に作成されたインスタンスを返します
newInstance - 新しいインスタンスを返します

静的ファクトリメソッドはファクトリパターンではないでしょうか?

ここまで言うと、これは純正モデルではないのではないかと思われる方も多いのではないでしょうか?回答: まったく同じではありません。

この記事で説明する静的ファクトリ メソッドは、ファクトリ パターンと同様にコンストラクターを置き換えるために使用されるメソッドであり、どちらも上記の 3 つの利点 (名前付け、環境保護、複数の子) を備えています。

ただし、この 2 つの実装方法と使用シナリオは異なります。


まず、コード構造の観点から直観的に言えば、私たちが話しているファクトリ パターンは通常、ファクトリ メソッドが定義されている xxxFactory クラスを必要としますが、この記事で説明する静的ファクトリ

メソッドは 1 つだけ必要です。クラス、クラス自体 これは、オブジェクトを生成するためのファクトリ メソッドを提供します。


次に、設計中にクラスが静的ファクトリ メソッドを提供する場合でも、ファクトリ パターンを使用する必要があるかどうかを考えてみましょう。


はい、その必要はありません。


言い換えると、クラスが静的ファクトリ メソッドを提供しない場合にのみ、ファクトリ パターンを使用する必要があります。


考えてみてください。Apple に強力な部品工場があるとしても、Foxconn は必要でしょうか?

概要

静的ファクトリーメソッドには、名前付き、環境に優しい、複数の子という 3 つの大きな利点があります。


クラスが静的ファクトリ メソッドを提供する場合、このクラスのファクトリ パターンを考慮する必要はありません。


クラスを作成するとき、最初に行うべきことは、パブリック コンストラクターを提供することではなく、静的ファクトリー メソッドを優先することです。

以上が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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の 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: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つの操作を実行する端末操作です。その設計意図はです

Java での日付までのタイムスタンプ Java での日付までのタイムスタンプ Aug 30, 2024 pm 04:28 PM

Java での日付までのタイムスタンプに関するガイド。ここでは、Java でタイムスタンプを日付に変換する方法とその概要について、例とともに説明します。

カプセルの量を見つけるためのJavaプログラム カプセルの量を見つけるためのJavaプログラム Feb 07, 2025 am 11:37 AM

カプセルは3次元の幾何学的図形で、両端にシリンダーと半球で構成されています。カプセルの体積は、シリンダーの体積と両端に半球の体積を追加することで計算できます。このチュートリアルでは、さまざまな方法を使用して、Javaの特定のカプセルの体積を計算する方法について説明します。 カプセルボリュームフォーミュラ カプセルボリュームの式は次のとおりです。 カプセル体積=円筒形の体積2つの半球体積 で、 R:半球の半径。 H:シリンダーの高さ(半球を除く)。 例1 入力 RADIUS = 5ユニット 高さ= 10単位 出力 ボリューム= 1570.8立方ユニット 説明する 式を使用してボリュームを計算します。 ボリューム=π×R2×H(4

PHP対Python:違いを理解します PHP対Python:違いを理解します Apr 11, 2025 am 12:15 AM

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHPは、シンプルな構文と高い実行効率を備えたWeb開発に適しています。 2。Pythonは、簡潔な構文とリッチライブラリを備えたデータサイエンスと機械学習に適しています。

PHP:Web開発の重要な言語 PHP:Web開発の重要な言語 Apr 13, 2025 am 12:08 AM

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

未来を創る: まったくの初心者のための Java プログラミング 未来を創る: まったくの初心者のための Java プログラミング Oct 13, 2024 pm 01:32 PM

Java は、初心者と経験豊富な開発者の両方が学習できる人気のあるプログラミング言語です。このチュートリアルは基本的な概念から始まり、高度なトピックに進みます。 Java Development Kit をインストールしたら、簡単な「Hello, World!」プログラムを作成してプログラミングを練習できます。コードを理解したら、コマンド プロンプトを使用してプログラムをコンパイルして実行すると、コンソールに「Hello, World!」と出力されます。 Java の学習はプログラミングの旅の始まりであり、習熟が深まるにつれて、より複雑なアプリケーションを作成できるようになります。

See all articles