KEIS BLOGは株式会社ケイズ・ソフトウェアが運営しています。

KEIS BLOG

Java Tips -=-= Library =-=- Apache Commons Lang Part 1

LINEで送る
[`evernote` not found]
Pocket

今回から数回に分けて、【Apache Commons Lang】をご紹介いたします。
今回は、ライブラリ内の全クラス紹介と

AnnotationUtils

class、

ArchUtils

class、

ArrayUtils

classのサンプルをご紹介します。

Apache Commons Langとは
Apache Commons Lang(アパッチ・コモンズ・ラング)は、ApacheのトッププロジェクトであるApache Commonsにある、Javaのjava.langパッケージを拡張するライブラリである。

– License:
Apache 2.0

– Home Page:
http://commons.apache.org/proper/commons-lang/

– Maven repository:
https://mvnrepository.com/artifact/org.apache.commons/commons-lang3

– Maven dependency

<dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-lang3</artifactId>
  <version>3.6</version>
</dependency>

– Java doc:
https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/package-summary.html

ライブラリ内のクラス一覧

– AnnotationUtils
Annotationインスタンスを操作するためのヘルパーメソッド。

– ArchUtils
Systemプロパティのユーティリティクラス。

– ArrayUtils
配列、プリミティブ配列、プリミティブラッパー配列の操作ユーティリティクラス。

– BitField
ビットマップフィールド操作のサポートクラス。

– BooleanUtils
booleanプリミティブとBooleanオブジェクトの操作ユーティリティクラス。

– CharSequenceUtils
NULLセーフなCharSequence操作。

– CharSet
文字の集合

– CharSetUtils
CharSetインスタンスの操作。

– CharUtils
charプリミティブとCharacterオブジェクトの操作。

– ClassPathUtils
クラスパスに関する操作。

– ClassUtils
リフレクションを使用せずにクラスで操作します。

– Conversion
エンディアンとビットオーダーの認識を使用して、型を別のものに変換する静的メソッド。

– EnumUtils
Java enumsのヘルパーメソッドを提供するためのユーティリティクラス。

– LocaleUtils
ロケールを操作するときに役立つユーティリティクラス。

– ObjectUtils
オブジェクトに対する操作。

– RandomStringUtils
廃止予定
代わりにcommons-textのRandomStringGeneratorを使用

– Range
最小値から最大値までの不変のオブジェクト範囲。

– SerializationUtils
シリアライゼーションプロセスを支援し、シリアライゼーションに基づいて追加の機能を実行します。

– StringEscapeUtils
廃止予定
代わりにcommons-textのStringEscapeUtilsを使用

– StringUtils
NULLセーフなStringの操作を行うクラス。

– SystemUtils
java.lang.Systemのヘルパークラス。

– ThreadUtils
java.lang.Thread and java.lang.ThreadGroupのヘルパークラス

– Validate
引数の検証をアシストするクラス。

AnnotationUtils
このクラスは、Annotationインスタンスを操作するためのヘルパーメソッドが含まれています。

– isValidAnnotationMemberType(Class type)
指定された型がアノテーションメンバーとして許可されているかどうかを確認します。
Java言語仕様は注釈のみで使用する特定の種類を許可します。これらにはString、Classプリミティブ型、Annotation、Enum、及びこれらのタイプの単一次元配列が含まれます。

import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

import org.apache.commons.lang3.AnnotationUtils;
import org.junit.Test;

public class AnnotationUtilsTest {

  @Test
  public void testAnnotationUtils() {
    assertTrue(AnnotationUtils.isValidAnnotationMemberType(org.junit.Test.class));

    assertTrue(AnnotationUtils.isValidAnnotationMemberType(java.lang.String.class));
    assertTrue(AnnotationUtils.isValidAnnotationMemberType(java.lang.Class.class));

    assertFalse(AnnotationUtils.isValidAnnotationMemberType(java.lang.Integer.class));
    assertFalse(AnnotationUtils.isValidAnnotationMemberType(null));
  }
}

ArchUtils
os.archシステムプロパティのためのユーティリティクラス。クラスは、現在のJVMのアーキテクチャを同定するための方法を定義します。

– getProcessor()

import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;

import org.apache.commons.lang3.ArchUtils;
import org.apache.commons.lang3.arch.Processor.Arch;
import org.apache.commons.lang3.arch.Processor.Type;
import org.junit.Test;

public class ArchUtilsTest {
  
  @Test
  public void testArchUtils() {
    assertThat(ArchUtils.getProcessor().getType(), is(Type.X86)); // => x86
    assertThat(ArchUtils.getProcessor().getArch(), is(Arch.BIT_64)); // => 64 bit
  }
}

ArrayUtils
配列、プリミティブ配列、プリミティブラッパー配列の操作ユーティリティクラス。

import static org.hamcrest.Matchers.arrayContaining;
import static org.hamcrest.Matchers.arrayContainingInAnyOrder;
import static org.hamcrest.Matchers.instanceOf;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;

import org.apache.commons.lang3.ArrayUtils;
import org.junit.Test;
/**
 * Test for ArrayUtils class.
 */
public class ArrayUtilsTest {

  /**
   * Test for {@link ArrayUtils#EMPTY_STRING_ARRAY}
   * 空の配列を取得する。各型毎に定義されている。
   */
  @Test
  public void testArrayUtilsNew() {

    Integer[] array = ArrayUtils.EMPTY_INTEGER_OBJECT_ARRAY;
    assertThat(array, is(new Integer[0]));
  }
  
  /**
   * Test for {@link ArrayUtils#add(Object[], Object)
   * 配列の最後に要素を追加する。
   */
  @Test
  public void testArrayUtilsAdd() {

    String[] array = ArrayUtils.add(ArrayUtils.EMPTY_STRING_ARRAY, "ABC");
    assertThat(array, is(arrayContaining("ABC")));
  }
  
  /**
   * Test for {@link ArrayUtils#addAll(Object[], Object...)
   * 配列の最後に複数の要素を追加する。
   */
  @Test
  public void tesetArrayUtilsAddAll() {
    String[] array = ArrayUtils.addAll(ArrayUtils.EMPTY_STRING_ARRAY, "ABC", "DEF", "GHI");
    assertThat(array, is(arrayContaining("ABC", "DEF", "GHI")));
  }
  
  /**
   * Test for {@link ArrayUtils#contains(Object[], Object)
   * 配列に指定された値が格納されているかチェックする。
   */
  @Test
  public void testArrayUtilsContains() {
    String[] array = {"ABC", "DEF", "GHI", "JKL"};
    assertTrue(ArrayUtils.contains(array, "ABC"));
    assertFalse(ArrayUtils.contains(array, "XXX"));
  }
  
  /**
   * Test for {@link ArrayUtils#insert(int, Object[], Object...)
   * 配列の指定位置に要素を追加する。(複数可)
   */
  @Test
  public void testArrayUtilsInsert() {
    String[] array = {"ABC", "GHI", "JKL"};
    array = ArrayUtils.insert(1, array, "DEF");
    assertThat(array, is(arrayContaining("ABC", "DEF", "GHI", "JKL")));
  }
  
  /**
   * Test for {@link ArrayUtils#remove(Object[], int)
   * 配列から指定位置の要素を削除する。
   */
  @Test
  public void testArrayUtilsRemove() {
    String[] array = {"ABC", "DEF", "GHI", "JKL"};
    array = ArrayUtils.remove(array, 1);
    assertThat(array, is(arrayContaining("ABC", "GHI", "JKL")));
  }

  /**
   * Test for {@link ArrayUtils#reverse(Object[])
   * 配列の並びを逆順に並び替える。
   */
  @Test
  public void testArrayUtilsReverse() {
    String[] array = {"ABC", "DEF", "GHI", "JKL"};
    ArrayUtils.reverse(array);
    assertThat(array, is(arrayContaining("JKL", "GHI", "DEF", "ABC")));
  }

  /**
   * Test for {@link ArrayUtils#shift(Object[], int)
   * 配列を指定回数シフトする。
   */
  @Test
  public void testArrayUtilsShift() {
    String[] array = {"ABC", "DEF", "GHI", "JKL"};
    ArrayUtils.shift(array, 1);
    assertThat(array, is(arrayContaining("JKL", "ABC", "DEF", "GHI")));
  }

  /**
   * Test for {@link ArrayUtils#shuffle(Object[])
   * 配列の並びをランダムに並べ替える。
   */
  @Test
  public void testArrayUtilsShuffle() {
    String[] array = {"ABC", "DEF", "GHI", "JKL"};
    ArrayUtils.shuffle(array);
    assertThat(array, is(arrayContainingInAnyOrder("ABC", "DEF", "GHI", "JKL")));
  }
  
  /**
   * Test for {@link ArrayUtils#swap(Object[], int, int)
   * 指定された配列の要素を入れ替える。
   */
  @Test
  public void testArrayUtilsSwap() {
    String[] array = {"ABC", "DEF", "GHI", "JKL"};
    ArrayUtils.swap(array , 0, 3);
    assertThat(array, is(arrayContaining("JKL", "DEF", "GHI", "ABC")));
  }
  
  /**
   * Test for {@link ArrayUtils#toObject(int[])
   * プリミティブ型配列からオブジェクト配列に変換する。
   */
  @Test
  public void testArrayUtilsToObject() {
    int[] array = {100, 200, 300, 400};
    Integer[] integerArray = ArrayUtils.toObject(array);
    assertThat(integerArray, is(instanceOf(Integer.class)));
    assertThat(integerArray, is(arrayContaining(100, 200, 300, 400)));
  }
}

【Apache Commons Lang】いかがだったでしょうか。
【ArrayUtils】は実際の業務でもよく使うライブラリで非常に便利です。
次回も引き続き【Apache Commons Lang】をご紹介します。

【関連記事】
Google App Engine 第一回
Google App Engine 第二回
Javaのライブラリを手軽にテストしたい!! Groovy入門 第1回
Google App Engine 第三回
Google App Engine 第四回
Google App Engine 第五回
Google App Engine 第六回
Google App Engine 第七回
Google App Engine 第八回
Google App Engine 第九回
Google App Engine 第十回
Google App Engine 第十一回
Google App Engine 第十二回
AngularJS入門01
AngularJS入門02
AngularJS入門03
AngularJS入門04
AngularJS入門05
AngularJS入門06
AngularJS入門07
AngularJS入門08
AngularJS入門09
攻略 Elevator Saga =基本編=
攻略 Elevator Saga =応用編=
Java Tips -=-= Library =-=- JodaTime [前半]
Java Tips -=-= Library =-=- JodaTime [後半]
Java Tips -=-= Library =-=- Lombok Part 1
Java Tips -=-= Library =-=- Lombok Part 2
Java Tips -=-= Library =-=- Lombok Part 3
Java Tips -=-= Library =-=- Lombok Part 4

LINEで送る
[`evernote` not found]
Pocket