この記事では、主に 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()
を呼び出すことが強制されます。 。 このようにして、セパレータ属性を使用中のロギング メカニズムに依存させることができます。 super()
。 这样我们就能强制separator属性依赖于已使用的日志记录机制。
注意:我们的引擎实现了所有日志机制共有的静态行为:startTransaction()
, endTransaction()
,同时将动态行为writeTransaction()
注:
私たちのエンジンは、すべてのログ記録メカニズムに共通の静的動作を実装しています: startTransaction()
、 endTransaction()
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 サイトの他の関連記事を参照してください。

この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

WebStorm Mac版
便利なJavaScript開発ツール

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

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