Java で抽象プロパティを定義する詳細な例
この記事では、主に Java での抽象属性の定義方法に関する関連情報を紹介します。必要な方は参照してください。
はじめに
この記事では、主に Java での定義について紹介します。抽象属性は、すべての人の参照と学習のために共有されます。以下では多くは言いませんが、詳細を見てみましょう:
抽象キーワードは、通常、特定の動作を実装するためにクラスとメソッドで使用されます。 Java は抽象プロパティをサポートしていないため、クラス プロパティを抽象としてマークしようとするとコンパイル時エラーが発生します。
このチュートリアルでは、Abstract キーワードを使用せずにサブクラスによって設定できる抽象プロパティを定義する 2 つの方法を紹介します。
実際的なケース
特定のトランザクション情報を記録するトランザクション ログ モジュールを実装したいとします。ファイルやデータベースへのログ記録など、さまざまなログ記録方法を実装できるように、このモジュールを抽象化したいと考えています。
私たちのエンジンは、事前定義された区切り文字を使用してログ内の情報を連結し、それを文字列に保存します。どの区切り文字を使用するかは、ログ ルールによって異なります。たとえば、文字「,」を使用して、ログ レコード内の情報の異なる部分を区切ることができます。
そのため、区切り文字はエンジンにとって抽象的なものであるように見え、各ロギング ルールによって明示的に定義する必要があります。
以下に、セパレータの定義をサブクラスに委任する 2 つの方法を示します。
抽象クラスでパラメーター化されたコンストラクターを定義する
抽象クラスで動的プロパティを定義する最初の方法は、パラメーター化されたコンストラクターを定義することです。
したがって、このエンジンは次のように実装できます:
// TransactionManager.java public abstract class TransactionManager { private String separator; public TransactionManager(String separator) { this.separator = separator; } public abstract void writeTransaction(String result); public Transaction startTransaction() { Transaction transaction = new Transaction(System.currentTimeMillis()); return transaction; } public void endTransaction(Transaction t) { long processingTime = System.currentTimeMillis() - t.getStartTime(); StringBuilder logBuilder = new StringBuilder(); logBuilder.append(t.getStartTime()); // Notice the use of this.separator logBuilder.append(this.separator); logBuilder.append(processingTime); logBuilder.append(this.separator); logBuilder.append(t.getData()); String result = logBuilder.toString(); writeTransaction(result); } }
抽象クラスでパラメーターを使用してコンストラクターを定義する場合、サブクラスは独自のコンストラクターを定義して super()</code > を呼び出すことが強制されます。 。 このようにして、セパレータ属性を使用中のロギング メカニズムに依存させることができます。 <code>super()
。 这样我们就能强制separator属性依赖于已使用的日志记录机制。
注意:我们的引擎实现了所有日志机制共有的静态行为:startTransaction()
, endTransaction()
,同时将动态行为writeTransaction()
注:
私たちのエンジンは、すべてのログ記録メカニズムに共通の静的動作を実装しています: startTransaction()
、 endTransaction() </code > code> を実行し、同時に動的動作 <code>writeTransaction()
を実装用のサブクラスに残します。
public class TransactionManagerFS extends TransactionManager{ // The IDE forces you to implement constructor. public TransactionManagerFS(String separator) { super(separator); } @Override public void writeTransaction(String result) { System.out.println("The following transaction has just finished: " ); System.out.println(result); } }
public static void main(String[] args) throws InterruptedException { // we pass the separator explicitly in the constructor TransactionManager transactionManager = new TransactionManagerFS(","); Transaction transaction = transactionManager.startTransaction(); transaction.setData("This is a test transaction !!"); Thread.sleep(1500); transactionManager.endTransaction(transaction); }
The following transaction has just finished:
1502179140689,1501,This is a test transaction !!
動的プロパティを実装する別の方法は、抽象ゲッターメソッドを定義することです。これは、現在のロギングメカニズムに基づいて、必須の区切り文字。私たちのエンジンでは、区切り文字が必要な場合、このゲッター メソッドを呼び出すことで区切り文字を取得できます。
public abstract class TransactionManager { public abstract String getSeperator(); public abstract void writeTransaction(String result); public Transaction startTransaction() { Transaction transaction = new Transaction(System.currentTimeMillis()); return transaction; } public void endTransaction(Transaction t) { long processingTime = System.currentTimeMillis() - t.getStartTime(); StringBuilder logBuilder = new StringBuilder(); logBuilder.append(t.getStartTime()); // Notice the use of getSeparator() logBuilder.append(getSeperator()); logBuilder.append(processingTime); logBuilder.append(getSeperator()); logBuilder.append(t.getData()); String result = logBuilder.toString(); writeTransaction(result); } }
public class TransactionManagerFS extends TransactionManager{ @Override public String getSeperator() { return ","; } @Override public void writeTransaction(String result) { System.out.println("The following transaction has just finished: " ); System.out.println(result); } }
public static void main(String[] args) throws InterruptedException { // The separator is defined implicitly using getSeparator() method of the manager TransactionManager transactionManager = new TransactionManagerFS(); Transaction transaction = transactionManager.startTransaction(); transaction.setData("This is a test transaction !!"); Thread.sleep(1500); transactionManager.endTransaction(transaction); }
以上がJava で抽象プロパティを定義する詳細な例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。The following transaction has just finished:
1502179140689,1501,This is a test transaction !!

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









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

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

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

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

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

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