システム開発で思うところ

Javaで主にシステム開発をしながら思うところをツラツラを綴る。主に自分向けのメモ。EE関連の情報が少なく自分自身がそういう情報があったら良いなぁということで他の人の参考になれば幸い

Java

Interfaceのdefaultで多重継承(ファーストクラスコレクション編)

はじめに コードの全量のリンクをこちらの記事に書いているので、先読みで全量を見たい方はこちらを参照してください。 vermeer.hatenablog.jp こちらでファーストクラスコレクションを扱う実装例を考えてみました。 ファーストクラスコレクション - システ…

ファーストクラスコレクション

はじめに 僕がはじめて「ファーストクラスコレクション」という名前を知ったのは @masuda220 さんの 「現場で役立つシステム設計の原則 ~変更を楽で安全にするオブジェクト指向の実践技法」から。 現場で役立つシステム設計の原則 変更を楽で安全にするオブ…

Interfaceのdefaultで多重継承(単位編)

はじめに コードの全量のリンクをこちらの記事に書いているので、先読みで全量を見たい方はこちらを参照してください。 vermeer.hatenablog.jp 今回はInterfaceのdefaultを使った「数値編」を拡張した「単位編」です。 Interfaceのdefaultではなくて、Interf…

Interfaceのdefaultで多重継承(数値編)

はじめに コードの全量のリンクをこちらの記事に書いているので、先読みで全量を見たい方はこちらを参照してください。 vermeer.hatenablog.jp 今回はInterfaceのdefaultを使った具体的な実装編の「数値編」です。 もともとの出発点がこちらの数値編(計算編…

Interfaceのdefaultで多重継承(文字列編)

はじめに コードの全量のリンクをこちらの記事に書いているので、先読みで全量を見たい方はこちらを参照してください。 vermeer.hatenablog.jp 今回はInterfaceのdefaultを使った具体的な実装編の1つ目「文字列」です。 何が嬉しいの? Nullableであること…

Interfaceのdefaultで多重継承(下準備編)

はじめに こちらの続きです。 コードの全量のリンクをこちらの記事に書いているので全量を見たい方はこちらを参照してください。 vermeer.hatenablog.jp まずは多重継承の話の前に必要な土台作りがメインです。 Objectクラスを、ほんの少し(?)拡張するInt…

Interfaceのdefaultで多重継承(はじめに)

はじめに 広くはこちらの続き vermeer.hatenablog.jp Interfaceのdefaultでやろうと思って、やっぱりやめたというのを、やっぱりやってみたという感じです。 先に断っておきますが、以降はOOPLの話ではありません。 あくまで Javaの言語仕様で実現できる実装…

BigDecimalを扱う共通クラス

はじめに 今までBigDecimalを使うようなコードを書くことが無かったのですが、とうとう(?)書く機会を得ました。 開発現場で共通部品として書いたものを振り返ることを目的にしつつ、現場では必要十分として*1 諦めたところなどを充足したものを整理しよう…

文字列をBase64に変換する

はじめに ファイルパス(もしくはそれに準ずる文字列)をURLパラメータに使いたいと思いましたが、そのままではエスケープをあれこれしないといけないし、マルチバイトが入ってくると長くなります。そこで文字列をバイナリー圧縮してBase64変換したら良いか…

NIO2のメモ

今更ながら… レッスン:基本的なI/O(Java?チュートリアル > 重要なクラス) パス操作(Java?チュートリアル > 重要なクラス > 基本的なI/O) ディレクトリの作成と読取り(Java?チュートリアル > 重要なクラス > 基本的なI/O) Javaファイル関連メモ2(Hishi…

Lambdaを使って内部リストを暴露しないで処理をする

最近、ちょっとずつStreamAPIだけでなく、Lambdaを使うことに少しずつ慣れてきつつあります。 Lambdaは無名クラスが簡単に使えるくらいの印象しか持っていなかったのですが、遅延評価の仕組みとして 徐々に使い方が分かってくると 何でもトンカチで殴りたく…

複数のResourceBundleを参照できるようにする

はじめに そもそもResourceBundle#getBundleに対して複数のリソースを読み込ませたいという要求自体があまりないのかもしれません。 もしそれをしたいのであれば、ListなりにResourceBundleを保持しておいて検索すれば事足りると思います。 ですが、BeanVali…

Optionalへの考察

nullを安全に扱うために使用するOptionalの使い方について、自分なりの指針を整理しておこうかなっと。 戻り値にのみ使用する 以上、おわり。 いや、、それだけではだめですよね。。 使用側に通知するため 使用側にとって戻り値がnull可能性の有無が分かれば…

JavaParser

構文解析をするときに便利そう。構文木の書き換えも出来るみたい。 CIとかaptと組み合わせると面白い事ができるかもしれない。 例えばプロジェクト独自の静的解析を走行したい場合や独自フレームワークの作法を強制させたいときとか。 ただ実行速度がどのく…

リファクタリングのメモ

自分向け。 過去に作ったものは、この考えに則っていないものは多々あるが、あくまで「今」の考え。多分今後も変わり続けると思う。 継承か委譲か 継承にするか、委譲にするか迷った時の判断基準 継承しているクラスのメソッドを拡張していないんだったら委…

パッケージの循環依存の対処

一般的にプログラムにおいて循環依存は良くないことと言われています*1。 とはいえ、Javaは循環依存をしていてもコンパイルエラーになることはありません。 なので気が付かない間に循環依存をしてしまっているケースはあるように思います。 とりあえず、パッ…

JavaSEのメモ

ブックマーク的なメモ 全般 Oracle JDK 8にあってOpenJDKにない機能 - Qiita http://www012.upp.so-net.ne.jp/eshibata/pdfs/Tiger20131025_FontEmbedded.pdf IT Pro Java技術最前線全目次集 - Code Discipline Java Generics Hell Advent Calendar 2017 - A…

Pluggable Annotation Processing API Sample

Pluggable Annotation Processing APIについて調べたり試したりしたまとめです。 今回やりたかったことは、Annotation Processorで生成したソースが確認できるまでの環境準備です。「とりあえずAnnotation Processorで簡易かつ完結したプロジェクトが欲しい…

Netbeans で Pluggable Annotation Processing API

こちらの記事のNetBeans版のようなものです。 d.hatena.ne.jp AnnotationProcessorが動くまでのところのチュートリアル的にやってみようと思ってやってみたところ、少し躓いたところもあったので誰かの参考になればと思い、まとめてみました。事例のベースも…

EnumのInterfaceに共通処理を実装する

以前の記事で、Interfaceとユーティリティのペアを説明しました。 Enumに状態を保持して、ユーティリティで振舞いを実装する、というやり方です。 vermeer.hatenablog.jp ロジックの冗長さを避けようと思ったわけですがオブジェクト指向ってそうじゃないんだ…

全部入りなResourceBundleを考える

恥ずかしながら、これまで小さくローカル環境のシステムなので国際化も文字コードも考慮することがありませんでした。 これまで参画したプロジェクトではフレームワークなりで準備されたものを使っていたので、あまり意識していませんでした。 調べて見ると…

JSFのSelectItemを拡張したEnumで実装する

前回、Enumを拡張しました vermeer.hatenablog.jpこれを使ってJSFのSelectItemを実装します。ちなみに、Enumだけでも十分対応は出来るようです。 【メモ】JSFでenumのオブジェクトをselectOneMenuに使う方法 - mike-neckのブログ JSFのConverterで見た闇の話…

EnumにInterfaceを使ってユーティリティを作成する

前回の続き vermeer.hatenablog.jp前回のEnumのようにテーブル値と表記がペアとなっているものは Interfaceを持たせて共通に操作する仕組みを作成しておくと便利です。 こちらの記事の方が良いと思います Enumの逆引きが冗長なので共通化する - QiitaEnumRev…

Enumはlombokとの組み合わせで振舞いを簡単に実装できる

Enumはとても便利。とはいっても、そのまま使うことは少ないです。テーブルの値や、画面におけるセレクトボックスの値などシステムにおける具体的な値と同期をとって使うことが多いように思います*1 今回は、性別をEnumで表現して画面などで使用するコード値…