ksino's diary

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

java

Selenideでclickに失敗するのを回避

Selenideで↓のようにclickを実行しようとすると、失敗するケースがありました。 $(By.id("id1")).click(); sendKeysを試したらうまくいきました。 $(By.id("id1")).sendKeys(Keys.ENTER); 原因はきちんと追っていないのですが、、、id1に紐づくのがsubmitボ…

ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD の除去

Eclipseに導入したSpotBugsで、「インスタンスメソッドからstaticフィールドへの書き込み」がエラー検知されました。↓こんなコードです。 public class WriteStatic { private static String s; public void method(String value) { s = value; } } 諸事情に…

PMD

ソースコードアナライザ pmd.github.io

gradleでのビルド時に、特定のクラス名を取得し、設定ファイル中の文字列を置換する

特定のネーミングルールに則ったクラス名の一覧を取得し、設定ファイルに書き込みたいことってありますよね。 build.gradle task genConfig { StringBuilder sb = new StringBuilder(); FileTree tree = fileTree(dir: 'src/main/java', include: '**/*Maste…

Thymeleafの式

変数式 ${...} 選択変数式 *{...} メッセージ式 #{...} リンクURL式 @{...} フラグメント式 ~{...}

propertiesファイルの読み込み

大した内容じゃないけど、すぐに忘れるのでメモ。 LoadProperties.java package jp.gr.java_conf.ksino.sample; import java.io.FileInputStream; import java.io.InputStreamReader; import java.util.Properties; public class LoadProperties { public st…

全角文字列を半角文字列に変換する

package com.example.normalize; import java.text.Normalizer; public class Zenkaku2Hankaku { public static void main(String[] args) { String zenkaku = "H20181226"; String hankaku = Normalizer.normalize(zenkaku, Normalizer.Form.NFKC)…

JavaSE 6 西暦で与えられた日付文字列を和暦に変換する

package com.example.era; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; public class EraMain { public static void main(String[] args) { Strin…

Commons FileUploadを試す

https://commons.apache.org/proper/commons-fileupload/ index.html <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> </body></html>

文字列の連結

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…