技術開発日記

技術やら日々思ったことを綴ってます。

Java

タイプアノテーション

今までクラスやメソッドに対して宣言できたアノテーションが、Java8から変数の型やジェネリックスの型に対してもアノテーションを定義することができるようになりました。 ただ、注意点として、あくまて宣言できるようになっただけでデフォルトでJavaに入っ…

関数型インターフェイスが多すぎる理由を調べてみた

Java8について調べると、標準で用意されている関数型インターフェイス関数の多さにびっくりする。 Supplier、Consumer、Predicate、Function、UnaryOperator、BinaryOperator、etc.. 全部で40以上はある。正直はじめはこれ全部覚えるのかと、かなり憂鬱だっ…

Java8のOptionalの使い所

そもそもOptionalとは OptionalはT型のオブジェクトに対するラッパーで、オブジェクトがnullかどうかを判断したり、nullだった場合のデフォルト値を設定できるJava8から追加されたクラス。 Nullオブジェクトに近い感じでしょうか。 どういったところで使うの…

Java8の文字列結合

Java8から文字列の結合方法がいくつか追加されたので、簡単にまとめました。 StringJoiner Java8から新しく追加されたクラスjava.util.StringJoiner。 区切り文字、サフィックス、プレフィックスを埋めて文字列を連結できるので 便利ライブラリGuavaのJoiner…

ランダム文字列生成

先日CodeIQでランダムパスワードを生成するプログラムの問題(挑戦者求む!【ウチに来ない?】[Java]ランダムパスワードの作成 by CodeIQ運営事務局 アプリケーションエンジニアを募集する企業│CodeIQ) で解答した際に使ったランダム文字列生成のメモです。そ…

リードオンリー・インタフェース

セキュスペの勉強がてらにIPAのサイトを見ていたら、リードオンリーインタフェース という考え方があって、なるほどーって思ったりしたので、その内容を少し。「カプセル化のすすめ」と題したその内容は簡単に言うとは普段getterとsetter を書いているクラス…

twitter4j

若干今更感はあるけど、twitter4jを触る機会があったので、とりあえず、以下の3機能を簡単に実装してみた。・OAuth認可をつかってツイートする。 ・指定したユーザのタイムラインを取得する。 ・ツイートの検索をする。■準備 1.なにはともあれ、まずはtwi…

シングルトンの変数

シングルトンの生成の方法はよく議論されるところなんだけど、 それとは別にシングルトンクラスの変数の初期化に関して少し予想外の挙動が起きたので、 メモしておきたいと思う。 public class Sample { public static void main(String args[]) { Single.ge…

環境による改行コード

Junitでテストを書いていたら、どうしても文字列が一致しないのケースがあって少し調べて見たら、どうやら改行コードの指定の仕方に問題があったみたい。テストケースは以下のような感じ。 @Test public void test() { // ファイルとかから文字列を取得 Stri…

ConcurrentHashMapという選択

最近「java.util.HashMap」がスレッドセーフじゃないことを知って それについていろいろ調べてみた。まず、「java.util.HashMap」はスレッドセーフじゃないから、複数スレッドが並行してHashMapにアクセスする場合はハッシュテーブルの破壊とか無限ループ、…

AtomicInteger

JDK1.5からスレッドセーフなクラスが色々と追加されているみたい。 中でも、AtomicInteger とかは便利で使い所が多いかも。 下はスレッドセーフな値を更新するサンプル今までの実装 class Atomic { private int count = 0; public synchronized void add(int…

for文でのIterator

while文でIteratorを使う場合の欠点としてローカル変数(以下の例の場合「it」)の有効範囲が広がるうえに、「it」という変数名が再利用できないといったことがある。 なのでIteratorを使う場合はwhile文じゃなくてfor文の中で使った方がいいよ、っていうこと…

Commons CLI

Jakarta Commons CLI というものが最近あるのを知ったので、少し調べてみた。いちようコマンドラインオプション解析ライブラリということだけど、つまりはシェルスクリプトとかでjavaを呼んだりするときに、optionやらhelpとかを簡単に実装できるライブラリ…

IllegalArgumentExceptionとIllegalStateExceptionの違い

メソッドの引数が不正だった場合に IllegalArgumentException をthrowするのはよく使っていたりしていたけど、、、 以下のような感じで。 public void regist(String name) { // 引数チェック if (name == null) { throw new IllegalArgumentException("引数…

SimpleDateFormatとマルチスレッド

SimpleDateFormatは基本的には以下の様にクラス変数として宣言するものと思っていた。 毎回newするのも微妙だと思って。 private static final DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); public void func () { } ただ、このように実装してしま…

ディレクトリ削除

Javaのファイル操作でディレクトリを削除しようと思ったら、中のサブディレクトリとファイルを削除しないと失敗してしまうので、わざわざ以下の様な長い処理を書かないといけない。 ただ、ディレクトリを削除したいだけなのに。。。※一様ファイルの場合でも…

ひらがなの検知

全角ひらがなを文字列から削除する方法を探していたところ、以下の方法があることを知って少し驚いた。"abcあいう123".replaceAll("[\\p{InHiragana}]", ""); 結果:abc123ただ調べた感じだと、\p{InHiragana}は単にひらがなの範囲指定を文字列に置き換えて…

ローカル変数のfinal

ローカル変数にfinal修飾子をつけるのってすごく違和感があったので、いろいろ調べて見たけど明確な答えがなかなか無かった。 インナークラスからアクセスできるようにするといった内部クラス絡みならわかるけど、個人的にはそれ以外でつける意味ってせいぜ…

バリデーション

バリデート処理の条件として、英数字のみとしたい場合にCharacterクラスのisLetterOrDigitというものがあるらしく、以下のように使うと検知できる。 String text = "ABC123あいう#$%"; for (char c : text.toCharArray()) { // 英数字の場合は出力 if(Charac…

初期化

変数をフィールド上で初期化するか、コンストラクタで初期化するかで迷ったときはコンストラクタので初期化をしたほうがよさそう。 フィールド上で初期化 class Sample { private Hoge hoge = new Hoge(); } コンストラクタで初期化 public class Sample { p…

Boolean

以前こんなif文を見たことがある。 Boolean boo = true; if (boo == Boolean.TRUE) { ...dosomething } if文でのbooleanは以下の用に記述するものだとずっと思っていた僕には少し衝撃的だった。 if (boo) { ...dosomething } そこでふとある疑問にぶつかって…

staticなメソッド

実装しているとたまに、このメソッドはstaticにするべきかしないべきか一瞬迷ってしまうことがある。 そのときの参考のために簡単にまとめ。 staticなメソッドのいくつかの特徴 ・staticなメソッドはインスタンスとは関係ないため、非staticフィールド、非st…