019-005-007

リソース管理: 連鎖クリーンアップ

上級

問題説明

リソース管理: バリデーション付き連鎖クリーンアップ

この問題では: AutoCloseableを実装したDatabaseConnectionクラスとFileWriterSimクラスを作成し、コンストラクタおよびメソッドに入力バリデーションを実装します。不正な引数に対してはIllegalArgumentExceptionをスローし、有効な引数に対しては処理結果の文字列を返すようにします。MainクラスのprocessQueryメソッドとprocessWriteメソッドはtry-with-resources構文を使ってリソースを管理します。

学習目標: AutoCloseableリソースへの入力バリデーション実装と、try-with-resourcesにおける例外の伝播を理解する

仕様

DatabaseConnectionクラス

  • AutoCloseableを実装する
  • コンストラクタ DatabaseConnection(String host):
    • hostnullまたは空文字の場合、IllegalArgumentException("Host cannot be null or empty")をスローする
    • それ以外の場合はホスト名をフィールドに保存する
  • query(String sql) メソッド:
    • sqlnullまたは空文字の場合、IllegalArgumentException("SQL cannot be null or empty")をスローする
    • それ以外の場合は "Result of [" + sql + "] on " + host を返す
  • close() メソッド: リソース解放処理(標準出力への出力は不要)

FileWriterSimクラス

  • AutoCloseableを実装する
  • コンストラクタ FileWriterSim(String filename):
    • filenamenullまたは空文字の場合、IllegalArgumentException("Filename cannot be null or empty")をスローする
    • それ以外の場合はファイル名をフィールドに保存する
  • write(String data) メソッド:
    • datanullの場合、IllegalArgumentException("Data cannot be null")をスローする
    • それ以外の場合は "Written [" + data + "] to " + filename を返す
  • close() メソッド: リソース解放処理(標準出力への出力は不要)

Mainクラス

  • processQuery(String host, String sql) 静的メソッド:
    • try-with-resources構文でDatabaseConnectionを生成する
    • db.query(sql)の結果を返す
    • 例外はそのまま呼び出し元に伝播させる
  • processWrite(String filename, String data) 静的メソッド:
    • try-with-resources構文でFileWriterSimを生成する
    • writer.write(data)の結果を返す
    • 例外はそのまま呼び出し元に伝播させる
  • main(String[] args) メソッド: プログラムのエントリーポイント

テスト例

呼び出し 結果
processQuery("localhost", "SELECT * FROM users") "Result of [SELECT * FROM users] on localhost"
processWrite("output.txt", "query result") "Written [query result] to output.txt"
processQuery(null, "SELECT * FROM users") IllegalArgumentException: Host cannot be null or empty
processQuery("localhost", "") IllegalArgumentException: SQL cannot be null or empty
processWrite(null, "data") IllegalArgumentException: Filename cannot be null or empty
processWrite("output.txt", null) IllegalArgumentException: Data cannot be null

コードを実行してみませんか?

この問題のコードエディタと実行機能を使用するには、ログインしてください。

アカウントをお持ちでない方

新規登録