Interfaceのデフォルトメソッド
個人的に、Apache Commonsは頻繁に使うのですけれど、近頃思うのは
StringUtils.・・・やFileUtils.・・・などを毎回書くのがめんどくせぇ
これを何とか手軽に省略できる手はないのかなぁと思いついたのが、インタフェースのdefault実装です。
思いつきなので有用であるか、メンテナンス性が良いのか…までは検討していません。
例えばこういうもの
StringUtilsとFileUtilsで頻繁に使うものだけ抽出してインタフェースを作ります。
CommonsLangInterface.java
import org.apache.commons.lang3.StringUtils;
public interface CommonsLangInterface {
public default boolean isBlank(String target) {
return StringUtils.isBlank(target);
}
}
FileUtilsInterface.java
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
public interface FileUtilsInterface {
public default String read(String path) {
try {
return FileUtils.readFileToString(new File(path),"utf-8");
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
これらを束ねるインタフェースも作ります
BundleInterface.java
public interface BundleInterface extends CommonsLangInterface,FileUtilsInterface {
}
これらのインタフェースを使ったロジックでは、次のように
SampleLogic.java
public class SampleLogic implements BundleInterface {
public void validation(String target) {
if (isBlank(target)) {
// isBlank == true のロジック。例えばエラーメッセージ出して終了。
return;
}
String data = read(target);
// 読み込んだdataの処理.......
}
}
と、省略できるようになります。
今回はApache Commonsを使った例を挙げましたが、業務ロジックでよく目にする ナントカUtils の代替とでき、特に継承クラスや他のインタフェースの邪魔はしない程度に作れますから、こういうのも良いのかも知れません。