山崎屋の技術メモ

IT業界で働く中で、気になること、メモしておきたいことを書いていきます。

Java Tips

Java 8 ソースコードを入手する

Windows での話です。Java のソースが JDK に含まれていなくて困った。ソースのダウンロード方法について、いくつか紹介されているサイトを見たが、古い情報もあり、入手するまで 1 時間程度さまよってしまった。なんか、国とか権利の関係で、Oracle のサイ…

Java8 での日付妥当性チェック

Java8 の LocalDate と DateTimeFormatter を使用した日付妥当性チェックについてです。2014 年に公開された Java8 を使用した日付妥当性チェックですが、すでに多くのサイトでサンプルが掲載されています。ただ、少し気になる実装も紹介されており、自分な…

java の例外設計

プロジェクトの設計フェーズ序盤で、例外の扱いについて方針を決める必要がある。もし、自分が方針を決めるとしたらこうするというものをメモしておく。 1.検査例外と非検査例外の使い分け 最近では検査例外を悪と考え、すべて非検査例外にラップしてスロ…

java オーバーロードの条件

オーバーロードの話です。オーバーライドではありません。 違いを簡単に オーバーライドは、親クラスのメソッドを子クラスで定義しなおすことです。通常、メソッドに @Override アノテーションを付与します。例 package org.yyama; // 親クラス public class…

Java の引数、オブジェクトは「参照の値渡し」

オブジェクト編です。プリミティブ型(基本型)の記事はこちら。話はそれますが、プリミティブ型の反対は参照型というらしいのですが、 今回のテーマの中で「参照型」って言葉を使うと、混乱するので、「オブジェクト」にしています。本題。 よく「Java では…

javaの引数 プリミティブ型(基本型)は値渡し

丁寧に説明しているサイトはいっぱいあるので、結論をメモしておきます。プリミティブ型(基本型)の引数は値渡しです。 public class Argument { public static void main(String[] args) { int a = 2; methodA(a); System.out.println("変数aの内容は[" + …

【java】DTO のテストコードを自動生成への道②

前回の記事はこちら。yyama1556.hateblo.jp とりあえず動くものを作った。github.comDtoTestGenerator と命名した。今のところ対応している型は int, long, Integer, Long, String のみ。テスト対象にできるクラスは 1 個 で、クラス名もハードコードとなっ…

java パッケージ配下のクラス一覧を取得 外部ライブラリは使用しない

外部ライブラリを使用せずにパッケージ配下のクラス一覧を取得する方法を調査した。DIコンテナなどは、「パッケージを指定して、その配下のクラスをコンテナに登録する」というのが一般的だと思うが、その仕組みを理解するのに役に立つ。あと、個人的な課題…

java のいろいろな型の型名を文字列で出力させてみる

DTO のテストコードを自動生成したくて、前回リフレクションの復習をした。型の判別をするために、テスト対象となるクラスのプライベート変数の型を取得しているが、どの型がどんな文字列で表現されるのか気になったので調べてみた。次のようなクラスを用い…

【java】DTO のテストコードを自動生成への道①

(2016/9/24 追記)とりあえず動くものを作った。 【java】DTO のテストコードを自動生成への道② - 山崎屋の技術メモ プライベート変数とその setter 、 getter のみで構成された DTO のソースを自動生成することがある。自動生成できるのであれば、そのソース…

【Eclipse】Java compiler level does not match・・・のエラー

Eclipse でプロジェクトの JRE バージョンをいじったりすると次のようなメッセージが表示されることがある。 Java compiler level does not match the version of the installed Java project facet.今回は Java のバージョンを 1.6 から 1.8 に変更したら出…

【Eclipse】 static import を整理させない

Eclipse のデフォルトでは "import static hoge.fuga.*" のようなソースの記述があった場合、import 文の整理を行うと勝手に "static import hoge.fuga.piyo" のように整理されてしまう。例えば、 package org.yyama; import static org.hamcrest.CoreMatche…

【Eclipse】セーブ時に自動で import を整理する。

Eclipse の豆知識。javaでコーディングしていると頻繁に import 文を追加したり消したりする。けっこう面倒くさい。不要になった import 文には警告が表示される。 Ctrl + Shift + O のショートカットでこれら不要な import 文は整理してくれるのだが、更に…

【Spring Framework】 登録されているBeanの一覧を表示

Spring Frameworkを使用して開発をしていると、XMLでbean定義しているはずなのに[No qualifying bean of type]とか[beanが定義されていません]のようなエラーが出てはまるときがある。そんなときは本当にSpringのコンテキストにbeanが登録されているかどうか…

Tomcat9 インストール

WEBアプリケーションでよく利用されるアプリケーションサーバTomcatをインストールする。インストールと言ってはいるものの、実際にはファイルを展開して置くだけである。Tomcatは軽量なサーブレットJSPコンテナであり、java言語で作成されたサーブレットやJ…

Eclipse プロジェクトのクリーンをショートカットで実行する

Eclipseで開発中のアプリの挙動がおかしくなったとき、プロジェクトのクリーンを試すことが多い。一日中開発をしているときは、プロジェクトを選択して[Project]→[Clean...]を1日何回押すことか。頻繁な操作はショートカットで一瞬で操作したい。今日はプロ…

java(JDK)をインストールしないで利用する

Windowsで複数バージョンのJDKを入れたい場合など、インストーラからインストールできない。ここでは、インストーラを使用せず、JDKをマシンに入れる方法をメモしておく。インストールしちゃうと「バージョンアップしろ!」とかうるさいしね。 JDKダウンロー…

Eclipseでかっこいいmainメソッドをテンプレートに登録

Java1.5 から可変長引数が使えることになり、maimメソッドも、 public static void main(String[] args) {} が、 public static void main(String... args) {} のようにかけるようになりました。こう書くことのメリットはいろいろあるでしょうが、何より最近…

java printf 使用例 longバージョン

printfを使って書式を整えるとき、いちいち「%」の後ろは何だっけ?とか桁数指定はどうやるんだっけ?とか調べている俺の現実があるので、まとめました。今回はlongのみです。以下のパターンで実際の書式の与え方と出力のされ方を見てみます。 ※「桁数指定(8…

JDK1.7u17では引数の円マーク(¥)が消える!?

と思ったら、バグのようで、JDK1.7u21では、直っていました。どういう現象化かというと、 public class Main { public static void main(String[] args) { for (String s : args) { System.out.println(s); } } } この場合に、引数に「C:\aaa\bbb\ D:\ccc\ee…

Class.forNameの意味

JDBC経由でデータベースにアクセスする場合、こういうおまじないがありますね。 Class.forName("oracle.jdbc.driver.OracleDriver"); いったい何の意味があるのでしょうか?Class.forNameはJavaDocによると「forName("X") の呼び出しによって、X というクラ…

SimpleDateFormatの厳密な・・・ 時刻バージョン

前回の続きですが、時刻でも同じです。 たとえば8時52分60秒は、文字列をDate型にパースする際に、厳密な解析を行わなければ8時53分0秒と解釈されます。 public class DateSample { public static void main(String[] args) { DateFormat dt = new SimpleDat…

SimpleDateFormatの厳密な・・・setLenient の使い方

2013年には2月29日がありませんが、SimpleDateFormat で厳密な解析を行わない場合、2013年3月1日と解釈してくれます。 public class DateSample { public static void main(String[] args) { DateFormat dt = new SimpleDateFormat("yyyyMMdd"); try { Syste…