ksino's diary

覚えたことを忘れないように、小さなことでも書いていく。

java

文字列の連結

StringJoinerクラスを使用する import java.util.StringJoiner; String s = new StringJoiner(",") .add("あいう") .add("えおか") .add("きくけ") .toString(); Collectors#joiningメソッドを使用する import java.util.stream.Collectors; import java.uti…

CDIビーンを動的に取得するコードの単体テスト

やりたいこと CDIビーンを動的に取得するコードについて書きました。 ksino.hatenablog.com で、Weldなどを使わずに当該コードの単体テストをやりたいです。 実装 CDI関連クラスのモックを作る CDIProviderクラスのモック package jp.gr.java_conf.ksino.wel…

CDIビーンを動的に取得する

やりたいこと CDIビーンを動的に取得したい。 動的という表現も微妙ですが、要は@Injectでなくプログラム的に取得したいということです。 実装コード CDIビーン インタフェース package jp.gr.java_conf.ksino.weldtest.cdibeans; public interface Hero { p…

Mockitoの使い方

やること Mockitoの使い方を覚えたい。 ちょっとずつ書いていく。 テスト対象のコード Car.java package jp.gr.java_conf.ksino.mockito; public class Car { private String team; private Engine engine; public Car() { super(); engine = new Engine(); …

CDIでインジェクトするクラスを切り替える

やりたいこと CDIでインジェクトするCDIビーンを切り替える方法にはいくつかありますが、ここでは@Alternativeとbeans.xmlを使います。 実装 CDIビーン package jp.gr.java_conf.ksino.weldtest.cdibeans; public interface Hero { public void showName(); …

NetBeansでクラスやメソッドの修飾名をコピーしたい

以下のプラグインを入れる plugins.netbeans.org

JavaSE環境でCDIを試したい

やりたいこと JavaSE環境でCDIを試したい。 どうやらWeldでできるようです。 環境 Oracle JDK 1.8.0_77(64bit) 準備(pom.xml) <dependency> <groupId>org.jboss.weld.se</groupId> <artifactId>weld-se</artifactId> <version>2.3.3.Final</version> <scope>compile</scope> </dependency> コード CDIビーン package jp.gr.java_conf.ksino.weldtest.cdibeans; pub…

型パラメータを取得する

やりたいこと Genericsで以下のような型パラメータが指定されていた場合、型パラメータに指定されたクラス名(jp.gr.java_conf.ksino.generics.ABean)を取得したい。 public class CBean { private List<jp.gr.java_conf.ksino.generics.ABean> aBeans; 実装 ParameterizedTypeで取れます。 import j</jp.gr.java_conf.ksino.generics.abean>…

Java 8でのファイル読み込み

こんなことができるようになっていた Path path = Paths.get("test.txt"); try (BufferedReader reader = Files.newBufferedReader(path);) { reader.lines().forEach(s -> System.out.println(s)); } catch (IOException ex) { // 例外処理 } test.txt ロズ…

文字列の結合(String#join)

Java 8でこんなことができるようになってた。 String[] array = {"a", "bc", "def", "ghi"}; System.out.println(String.join("_", array)); 実行結果 a_bc_def_ghi

EclipseでexportしたJARファイル内でgetResourceするとnullが返る

JARファイル内のリソースを読み込む方法について書きました。 ksino.hatenablog.com ただし、Eclipseのexportで生成したJARファイルでは、getResourceがnullを返すことがあります。 その場合は、export時に"Add directory entries"オプションのチェックボッ…

JAR内の特定のディレクトリに格納された定義ファイルをすべて読み込む

やりたいこと JAR内の特定のディレクトリに格納された定義ファイルをすべて読み込みたい。 例えばJARの構成が以下であった場合、messagesディレクトリに格納された*.propertiesを読み込みます。 xxx.jar ├META-INF/ | └MANIFEST.MF ├com/ | └example/ | └…

Javaでオブジェクトのディープクローンを行う

ディープクローンという言葉があるかどうか分かりませんが。。 オブジェクトのディープコピーを返すメソッドを作成します。 方法はいくつかあるかと思いますが、ここではSerializableインタフェースを用いてやってみます。 public static Object deepClone(S…

SimpleDateFormatを使って、文字列が日付として正しいかチェックする

public static void main(String[] args) { System.out.println(checkDate("20150823")); // true System.out.println(checkDate("20150831")); // true System.out.println(checkDate("20150832")); // false System.out.println(checkDate("a20150823")); …

java.util.DateのhashCodeを比較

java.util.Date#hashCodeメソッドはオーバーライドされており、「オブジェクトそのものの比較」には使えません。 http://docs.oracle.com/javase/jp/7/api/java/util/Date.html#hashCode()こんな処理を実行すると long current = System.currentTimeMillis()…

Ubuntu 14.04にOracke JDK 8をインストールする

PPAで楽してインストールします。 sudo add-apt-repository ppa:webupd8team/java sudo apt-get update sudo apt-get install oracle-java8-installerあとは画面の指示に従っていくだけ。もしOpenJDKが導入済みであれば、Oracle JDKの導入前に消しておきます…

UbuntuにOpenJDKをインストールする

端末から以下を実行します。 sudo apt-get install openjdk-7-jdk参考 https://help.ubuntu.com/community/Java

Bytemanを使ってみる

Bytemanを使って、実行中のアプリの情報を取得してみます。 入手と導入 ここからダウンロードできます。 http://www.jboss.org/byteman/downloads.html 適当なディレクトリに展開し、展開先ディレクトリを環境変数BYTEMAN_HOMEとして設定しました。ついでに…

BTraceを使ってみる

アプリのモジュールに手を入れられない、デバッガも使えない、でも実行情報は取得したい…、というときに便利です。 入手と導入 このあたりからBTraceを入手し、任意のディレクトリへ解凍します。 https://kenai.com/projects/btrace/downloads/directory/rel…

jpsコマンドで何も表示されない

javaプロセスを実行中に、jpsコマンドを叩いても何も表示されない、、というトラブルがありました。javaは実行すると環境変数%TEMP%以下に"hsperfdata_"というディレクトリを作成するようです。Windows 7のデフォルトなら↓ですね C:\Users\<ユーザ名>\AppDat…

FacesContextを扱うクラスの単体テスト

FacesContext.getCurrentInstance().getViewRoot()とかやってるクラスの単体テストをやる必要がありました。しかし、単純にJUnitを起点にFacesContext.getCurrentInstance()が叩かれると、nullが返ってくるんですね。どうしたもんだろ?と考えたのですが、mo…

JDK組み込みのJavaScriptエンジンを使う

JDK6からはJavaScriptエンジンが組み込まれています。 以下のコマンドで実行できます。 <JAVA_HOME>\bin\jrunscript.exe以下のように実行します。 > jrunscript test.js引数を指定しなければ対話モードで起動します。 > jrunscript</java_home>

Apache POIでExcelのファイルを読み込む

以下のExcelファイルを読み込みます。 # name point 1 ベッテル 397 2 アロンソ 242 3 ウェバー 199 POIを使ったコードはこんな感じ。 import java.io.FileInputStream; import java.io.InputStream; import org.apache.poi.ss.usermodel.Cell; import org.a…

UTF-8なソースをJavaソースをコンパイル、実行する on Windows with Cygwin

僕が使っているCygwinコンソールでは、文字コードをUTF-8にしています。 WindowsではデフォルトのエンコーディングがMS932になっています。 よって、UTF-8のソースをコンパイル、実行するためにはオプションの指定が必要です。コンパイル $ javac -encoding …

JavaとRubyの例外処理の書き方の違い

Java try { // 処理 } catch (Exception e) // 例外処理 } finally { // 後始末とか } Ruby begin # 処理 rescue => e # 例外処理 ensure # 後始末とか end

JSFのフェーズ

いつも忘れてしまうのでメモ。。Restore View Phase (1) Apply Request Values Phase (2) Process Validation Phase (3) Update Model Values Phase (4) Invoke Application Phase (5) Render Response Phase (6)

privateなインナークラスをリフレクションで触る

privateなインナークラスをリフレクションで触る方法について調べました。 Constructorクラスを取得する際の引数列がポイントかな。。 対象のクラス public class OuterClass { public String outer(String str) { InnerClass inner = new InnerClass(str); …