ホームページ Java &#&チュートリアル Java で抽象プロパティを定義する詳細な例

Java で抽象プロパティを定義する詳細な例

Aug 20, 2017 am 09:40 AM
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);
 }
}
ログイン後にコピー

また、TransactionManagerFS も次のように変更します:


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);
 }
}
ログイン後にコピー

次に、新しい実装を使用するように main を変更し、正しい結果が得られることを確認します。


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);
 }
ログイン後にコピー

出力:

The following transaction has just finished: 
1502179140689,1501,This is a test transaction !!
ログイン後にコピー
ログイン後にコピー
🎜概要🎜🎜🎜

以上が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:28 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つの操作を実行する端末操作です。その設計意図はです

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

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

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

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

See all articles