発熱するマイナー魂

隠れた名作の発掘が生きがい。サブカル作品の感想とIT技術メモ中心のブログです。

Java

【Java】アノテーションを利用してフィールドの項目長をチェックする

JavaでBeanやDTOのフィールドの項目長をチェックするサンプルプログラムを書きました。フィールドに項目長用のアノテーションを追加し、そのアノテーションとフィールドの項目長とを比較して、項目長がオーバーしていたらログ出力するコードです。

【Java】Beanのフィールドの値を一気に更新する

JavaでBeanやDTOのフィールドの値を一気に更新したい。例えば、空文字が入っているString型のフィールドの値を一律nullにしたい。ただし、フィールドをひとつずつ見ていってnullにセットする処理はやりたくない。そんな要望を満たすべく、変数の値を一括で初…

【Java】TimerとScheduledExecutorServiceの例外ハンドリング

TimerやScheduledExecutorServiceといったスケジュール機能を利用すると、タスクを定期的に実行させることができます。しかし、タスク実行中に例外(Exception)が発生すると、スケジュール機能自体が停止してしまう可能性があります。このスケジュール機能停…

【Java】日付のフォーマットが異なるJSONデータをオブジェクトに変換する

日付のフォーマットが異なるJSONデータをDTOなどにしたい場合もあったりします。下記のようなJSONデータをGsonライブラリを利用してデータオブジェクトに変換する処理をメモしました。 { "date": "2013-09-17", "created_at": "2013-09-16T22:32:36Z", "msg"…

【Eclipse】デバッグでExceptionを発生させる方法

Eclipseのデバッグモードでプログラムをトレースしている途中にエラー(Exception)を発生させたい時もあったりします。忘れがちなので、その方法をメモしました。 事前準備(displayビューの追加) EclipseのWindow -> Show View -> Otherより、display ビュ…

【log4j2】ThreadContextを利用してすべてのログに追加情報を出力する

log4j2でセッションIDやユーザID等、ログに毎回書き出したいような情報を付加する場合はThreadContextを利用するのが良さそうです。Thread ContextのStackとMapの機能を利用して、追加情報をログに出力するサンプルを書きました。

【log4j2】コード上でログレベルを設定する

ログレベルの設定値を、ログの設定ファイル(log4j2.xml)ではなくソースコードや外部ファイルに持たせたい要求もあったりします。その要求を満たすべく、log4j2.xmlに書いたログレベルをファイル読み込み時に上書きするサンプルを書きました。

Spring Frameworkの開発環境構築メモ

次のプロジェクトがどうやらSpring Frameworkを使うようなので、さっそく勉強です。まずは開発環境の構築です。すぐにできるかと思ったけれど、なんかいろんなエラーが出たわけで。。

AndroidのMQTTクライアントを導入する

AndroidでMQTTのPublisher/Subscriberを実装する場合、Paho Android Serviceライブラリを利用するのが便利そうです。このライブラリを利用したMQTTクライアントの作成手順をメモしました。 事前準備 android API 19が必要のため、あらかじめSDKマネージャで…

EclipseでAntのJavaタスクをデバッグ実行する設定手順

Antファイルに書いたJavaタスクをEclipseでデバッグ実行する手順をメモしました。Javaタスクをリモートデバッグ可能なように起動させ、Eclipseからデバッグ接続します。 適当なプロジェクトとクラスの用意 HelloWorldプロジェクトのsrcディレクトリ直下に下…

Antの基本的な制御文のまとめ

Antとは主にJavaなプロジェクトで使われているビルドツールです。使いこなせたらかなり便利なツールだということにやっと気づいたので、少しずつ勉強しはじめました。Antで何かを書く際の基本となる制御文を主にまとめました。 基本の形 projectタグの中にta…

【テクニック】List AとList Bに含まれている要素で一致するものを高速に抽出する

List AとList Bに含まれている要素を比較し、一致する要素を抽出するような処理はHashMapを使えば高速になる場合があります。そのテクニックを教わったので紹介します。 テストデータの作成 次のような感じで、検証用のテストデータを作成します。listAの要…

MacにSAStruts開発環境を整える

ストラッツ?ナッツの仲間かな。 ダイコン?ふろふき美味しいよね。 そんな状態なのにStruts経験者としてプロジェクトにアサインするとか訳が分からない。。 というわけで早急にSAStrutsを覚えないとパコーンってされる状態になったので、勉強のためまずMac…

I18Nを考慮したtoLowerCase

I18Nとは国際化(Internationalization)の略で、多様な言語や地域に適合できるようにソフトウェアを開発することです。I18Nは個人的に注目しているキーワードで、この設計思考が今後重要になってくると予感しています。ここでは、このI18Nの具体例としてtoLow…

staticなフィールド変数にどうアクセスする?

javaのクラスにおいて、直接参照可能であるstaticなフィールド変数(もしくはメソッド)へのアクセス方法には2つの方法があります。 (A) オブジェクト名.フィールド変数名 (B) クラス名.フィールド変数名 どっちでも良いと思っていたのですが、可読性を高め…

JavaでXML文書を読みこみ要素情報を取得する

XML文章を読み込み,その文章に書かれた要素情報を取得するJavaプログラムを作ってみました.前回のJavaでXML文書を記述しファイルへ書きこむで書いたプログラムを実行して得られたXML文章の要素や属性等の情報を抽出します. ソースコード import java.io.F…

JavaでXML文書を記述しファイルへ書きこむ

XML文書をJavaで読み書きすることが業務で結構ありそうな気配なので,今のうちに予習の意味を込めてそのプログラムを書いてみました.ここではまず,XML文を記述し,それをファイルへと書きこむ処理について書いています. はじめに,XMLの用語統一のため,…

文字列をBase64でエンコードするjavaプログラムに挑戦

勉強会で文字列をBase64でエンコードするjavaのプログラムを作成する機会があったので,その時に書いたコードを修正して載せています.単純にエンコードするだけれあれば,sun.misc.BASE64Encoderを利用する方法がありますが,ここではエンコードする部分を…

privateなフィールドを直接参照してgetterとsetterをテストする

単体テストでゲッター(getter)とセッター(setter)の動作確認をしなければならないことがあります*1.それらは構造が単純なので,ただデバッグによる目視確認でよいだけだと思いますが,それらが大量にある場合はデバッグでそれらを一つ一つ確認するのは手間…

SJC-Pの受験記録と試験対策のまとめ

SJC-P(Java Standard Edition 6 Programmer Certified Professional Exam)に合格しました.試験結果は60点中43点(合格点は35点以上)と,まぁさえない点数ですが,これでようやくいろいろと開放された感じです.SJC-P受験はなかなか良い経験になったので,…

Collectionsクラスを利用してリストの要素を2つの方法でソートする

コレクションを操作するためのクラスとして,java.util.Collectionsクラスがあります.このクラスにはListクラスの要素をソートするメソッドが2つ用意されています.それら2つのシグネチャは次の通りです. static <T extends Comarable<? super T>> void sort(List<T> list) static <T> void sort</t></t></t>…

ジェネリックスにワイルドカードを用いた後の注意事項

ジェネリックスにはワイルドカード「?」を用いることができます.これを用いることで,型パラメータにスーパークラスやサブクラスを指定することができますが,その後の使用に制限が付きます. ワイルドカードを用いた次の記述を考えます.型パラメータにク…

同一の文字列リテラルを持つStringオブジェクトを作成する際の注意

Stringクラスのオブジェクトを作成する記述方法には次の2つがあります. (1) new演算子を用いた方法 (2) 文字列リテラルのみを用いた方法 例えば,"A"という文字列を表すStringオブジェクトを作る場合,上記はそれぞれ次のように記述します. String string1…

スレッドがスローする例外をキャッチする

マルチスレッド環境下で,あるスレッドからスローした例外を別のスレッドでキャッチしたい場合,java.lang.Thread.UncaughtExceptionHandlerインタフェースを実装したクラスを用意し,このインスタンスを例外がスローされるスレッドにセットするということを…

共変戻り値を使ってみた

共変戻り値とは,インタフェースを実装したメソッド,またはサブクラスでオーバーライドするメソッドの戻り値が,その戻り値のサブクラスでも良いという仕様です.JDK5.0以降にこの仕様が追加されました. 共変戻り値の実現を確かめるプログラムを次のように…

「throws指定されたメソッドをもつクラス」を継承してオーバライドする際の記述規則

スーパークラスで定義したメソッド(もしくは抽象メソッド)にthrows指定があり,そのクラスを継承したクラスでそのメソッドをオーバライドする場合の記述方法についてまとめました. まず,次のようなメソッドがスーパークラスで宣言されているとします. v…

static初期化子,インスタンス初期化子,コンストラクタの実行順序

クラスにはstatic初期化子(staticイニシャライザ),インスタンス初期化子(インスタンスイニシャライザ),コンストラクタが定義できます.それらはインスタンス生成時に行いたい処理を記述することができますが,実行するタイミングが違うため注意が必要…

コレクションに慣れよう

Javaにはコレクションといわれるフレームワークがあります.簡単に言うと,複数の要素を操作・管理する仕組みです.しかし,概要はだいたい分かっていますが,まだ不慣れなため実装したいときにすぐに使えないというのが現状です.そのため,すぐに使えるよ…

インスタンスメソッドとstaticメソッドのロック

Javaのスレッドが実行するメソッドはsynchronizedキーワードを用いることによってロックすることができます.ロックはインスタンスメソッドとstaticメソッドにかけることができます. サンプルプログラムを以下に示します.Printクラスのrunメソッド内でイン…

日付と時刻の書式化(フォーマット)を行ってみた

Javaでは,日付と時刻の書式化(フォーマット)のためにjava.text.DateFormatクラスが用意されています.書式化の利用方法は,DateFormatクラスのオブジェクトを生成し,formatメソッドを呼び出すことで実現できます. オブジェクトを生成するメソッドは,大…

サブクラスを直列化する際に,直列化可能でないスーパークラスで注意すること

スーパークラスが直列化可能でなく,サブクラスが直列化可能である場合,サブクラスのオブジェクトの入出力を行うときには引数のないコンストラクタが呼ばれるそうです.また,スーパークラスが直列化可能な場合,サブクラスも直列化可能であるため,コンス…

オブジェクトの直列化と,直列化させない2つの方法(transient,static)

Javaにおいて,入出力ストリームを通してオブジェクトをやり取りできるようにする仕組みを”直列化(シリアライズ)”と呼ぶそうです.ざっくり言うと,オブジェクト単位でファイルに読み書きができるようにする仕組みです. オブジェクトを入出力するストリー…

String,StringBuffer,StringBuilderの実行時間を比較してみた

Javaでは,文字列を管理するクラスとして,java.langパッケージに含まれる次の3つがあります.(A) String (B) StringBuffer (C) StringBuilderそれらの大きな違いを次の表の通りです. String StringBuffer StringBuilder 文字列変更可能 × ○ ○ スレッドセー…

Javaで無名クラスを利用する際に注意すること

無名クラスは,特定のスーパークラス,インタフェースを継承,実装して使用します.その際にメソッドのオーバーロードやオーバーライドができるのですが,無名クラスのインスタンスを参照型変数に代入して使用する場合,オーバーロードしたメソッドは使用で…

インナークラスからメンバを利用する際に注意すること

Javaではクラスの中にクラスを定義することができます.しかし,その際のメンバやメソッドへのアクセスがややこしいので,プログラムを書いてみて試してみました.まず,インナークラスは大きく次の4つに分類されます. (1)非staticなインナークラス (2)stat…

Threadの生成方法と,無限にstartし続けない不思議

Threadを2つの方法で実装してみる JavaでのThread生成方法は大きく2つあります. ・方法1 Threadクラスを継承したクラスを作成し,それを利用する方法. ・方法2 Threadクラスのコンストラクタの引数にRunnableインタフェースを実装したクラスのオブジェクト…

Javaの例外処理において複数のcatchブロックを使用する際に気をつけること

Javaの例外処理では,catchブロックを複数書くことがありますが,どうやらサブクラスのcatch文を先に指定しないといけないようです. 例えば次の例外クラスの継承関係を見てみます. ExceptionクラスのサブクラスにはRuntimeExceptionクラスがある. Runtime…

ファイナライザとガベージコレクション

ファイナライザとは,インスタンスがメモリ領域から破棄される直前に呼び出されるメソッドです.ファイナライザのメソッド名はfinalize()で,次のように定義されています. protected void finalize() throws Throwable() メモリ領域からのインスタンスの破…

可変長引数

Javaでは可変長引数を利用することで,メソッドの引数を任意に設定できる.JDK 5.0で新しく追加された機能です. 可変長引数の書式は次の通り. メソッド名(引数の型... 配列名){...} 実引数が複数ある場合,その最後に可変長配列を定義できる. メソッド名(…