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

KEIS BLOG

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


前回に引き続き【Apache Commons Lang】をご紹介いたします。
今回は、

CharUtils

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

ClassPathUtils

このクラスは、クラスパスに関しての操作を提供します。このクラスのメソッドはnullの入力を許可していません。

– static String toFullyQualifiedName(Class context, String resourceName)
– static String toFullyQualifiedName(Package context, String resourceName)

contextに関連したresouceNameの修飾された完全な名称を返します。

	/**
	 * Test for
	 * {@link ClassPathUtils#toFullyQualifiedName(Class, String)}
	 * {@link ClassPathUtils#toFullyQualifiedName(Package, String)}
	 */
	@Test
	public void testToFullyQualifiedName() {
		assertThat(ClassPathUtils.toFullyQualifiedName(String.class, "String.properties"),
				is("java.lang.String.properties"));
		assertThat(ClassPathUtils.toFullyQualifiedName(String.class.getPackage(), "String.properties"),
				is("java.lang.String.properties"));
	}

– static String toFullyQualifiedPath(Class context, String resourceName)
– static String toFullyQualifiedPath(Package context, String resourceName)

contextに関連したresouceNameの修飾された完全なパスを返します。

	/**
	 * Test for {@link ClassPathUtils#toFullyQualifiedPath(Class, String)}
	 * {@link ClassPathUtils#toFullyQualifiedPath(Package, String)}
	 */
	@Test
	public void testToFullyQualifiedPath() {
		assertThat(ClassPathUtils.toFullyQualifiedPath(String.class, "String.properties"),
				is("java/lang/String.properties"));
		assertThat(ClassPathUtils.toFullyQualifiedPath(String.class.getPackage(), "String.properties"),
				is("java/lang/String.properties"));
	}

ClassUtils

リフレクションを使用せずに、クラスで動作します。このクラスはnull入力を正常に処理しようとします。

– static List convertClassesToClassNames(List> classes)

与えられたClassオブジェクトListをクラス名Listに変換します。

	/**
	 * {@link ClassUtils#convertClassesToClassNames(java.util.List)}
	 */
	@Test
	public void testConvertClassesToClassNames() {
		final List<Class<?>> classList = Arrays.asList(String.class, Integer.class);
		final List<String> nameList = ClassUtils.convertClassesToClassNames(classList);
		assertThat(nameList, hasItems("java.lang.String", "java.lang.Integer"));
	}

– static List> convertClassNamesToClasses(List classNames)

与えられたクラス名ListをClassオブジェクトListに変換します。

	/**
	 * {@link ClassUtils#convertClassNamesToClasses(List)}
	 */
	@Test
	public void testConvertClassNamesToClasses() {
		final List<String> nameList = Arrays.asList("java.lang.String", "java.lang.Integer");
		final List<Class<?>> classList = ClassUtils.convertClassNamesToClasses(nameList);
		assertThat(classList, hasItems(String.class, Integer.class));
	}

– static String getAbbreviatedName(Class cls, int len)
– static String getAbbreviatedName(String className, int len)

クラスの略称を指定された桁数ないで作成します。

	/**
	 * {@link ClassUtils#getAbbreviatedName(Class, int)}
	 * {@link ClassUtils#getAbbreviatedName(String, int)}
	 */
	@Test
	public void testGetAbbreviatedName() {
		assertThat(ClassUtils.getAbbreviatedName(String.class, 10), is("j.l.String"));
		assertThat(ClassUtils.getAbbreviatedName("java.lang.String", 10), is("j.l.String"));
	}

– static List> getAllInterfaces(Class cls)

クラスとそのスーパークラスによって実装されている全てのインターフェースをListで返します。

	private interface TestInterface {
	}

	private abstract class TestAbstract {
	}

	private class TestClass extends TestAbstract implements TestInterface {
	}

	/**
	 * {@link ClassUtils#getAllInterfaces(Class)}
	 */
	@Test
	public void testGetAllInterfaces() {
		assertThat(ClassUtils.getAllInterfaces(TestClass.class), hasItem(TestInterface.class));
	}

– static List> getAllSuperclasses(Class cls)

特定クラスのスーパークラスを全てListで返します。

	/**
	 * {@link ClassUtils#getAllInterfaces(Class)}
	 */
	@Test
	public void testGetAllSuperClass() {
		assertThat(ClassUtils.getAllSuperclasses(TestClass.class), hasItem(TestAbstract.class));
	}

– static Class getClass(ClassLoader classLoader, String className)
– static Class getClass(ClassLoader classLoader, String className, boolean initialize)
– static Class getClass(String className)
– static Class getClass(String className, boolean initialize)

classNameからクラスを生成し、返します。

	/**
	 * {@link ClassUtils#getClass(ClassLoader, String)}
	 * {@link ClassUtils#getClass(ClassLoader, String, boolean)}
	 * {@link ClassUtils#getClass(String)}
	 * {@link ClassUtils#getClass(String, boolean))}
	 */
	@Test
	public void testGetClass() throws Exception {
		assertTrue(ClassUtils.getClass(getClass().getClassLoader(), "java.lang.String").equals(String.class));
		assertTrue(ClassUtils.getClass(getClass().getClassLoader(), "java.lang.String", true).equals(String.class));
		assertTrue(ClassUtils.getClass("java.lang.String").equals(String.class));
		assertTrue(ClassUtils.getClass("java.lang.String", true).equals(String.class));
	}

– static String getPackageCanonicalName(Class cls)
– static String getPackageCanonicalName(Object object, String valueIfNull)
– static String getPackageCanonicalName(String canonicalName)

クラス(オブジェクト、文字列)の正規名からパッケージ名を取得します。

	/**
	 * {@link ClassUtils#getPackageCanonicalName(Class)}
	 * {@link ClassUtils#getPackageCanonicalName(String)}
	 */
	@Test
	public void testGetPackageCanonicalName() {
		assertThat(ClassUtils.getPackageCanonicalName(String.class), is("java.lang"));
		assertThat(ClassUtils.getPackageCanonicalName("java.lang.String"), is("java.lang"));
	}

– static String getPackageName(Class cls)
– static String getPackageName(Object object, String valueIfNull)
– static String getPackageName(String className)

クラス(オブジェクト、文字列)からパッケージ名を取得します。

	/**
	 * {@link ClassUtils#getPackageName(Class)}
	 * {@link ClassUtils#getPackageName(String)}
	 */
	@Test
	public void testGetPackageName() {
		assertThat(ClassUtils.getPackageName(String.class), is("java.lang"));
		assertThat(ClassUtils.getPackageName("java.lang.String"), is("java.lang"));
	}

– static Method getPublicMethod(Class cls, String methodName, Class… parameterTypes)

クラスからMethodオブジェクトを生成します。

	/**
	 * {@link ClassUtils#getPublicMethod(Class, String, Class...)}
	 */
	public void testGetPublicMethod() throws Exception {
		List<String> list = Collections.emptyList();
		Method method = ClassUtils.getPublicMethod(list.getClass(), "isEmpty", new Class[0]);
		assertThat(method.invoke(list, new Object[0]), is(true));
	}

– static String getShortCanonicalName(Class cls)
– static String getShortCanonicalName(Object object, String valueIfNull)
– static String getShortCanonicalName(String canonicalName)

クラス(オブジェクト、文字列)から正規名からパッケージを除外した名称を返します。

	/**
	 * {@link ClassUtils#getShortCanonicalName(Class)}
	 * {@link ClassUtils#getShortCanonicalName(String)}
	 */
	@Test
	public void testGetShortCanonicalName() {
		assertThat(ClassUtils.getShortCanonicalName(String.class), is("String"));
		assertThat(ClassUtils.getShortCanonicalName("java.lang.String"), is("String"));
	}

– static String getShortClassName(Class cls)
– static String getShortClassName(Object object, String valueIfNull)
– static String getShortClassName(String className)

クラス(オブジェクト、文字列)から正規名からパッケージを除外したクラス名称を返します。

	/**
	 * {@link ClassUtils#getShortClassName(Class)}
	 * {@link ClassUtils#getShortClassName(String)}
	 */
	@Test
	public void testGetShortClassName() {
		assertThat(ClassUtils.getShortClassName(String.class), is("String"));
		assertThat(ClassUtils.getShortClassName("java.lang.String"), is("String"));
	}

– static String getSimpleName(Class cls)
– static String getSimpleName(Object object, String valueIfNull)

aClass.getSimpleName()のNullセーフバージョン

	/**
	 * {@link ClassUtils#getSimpleName(Class)}
	 * {@link ClassUtils#getSimpleName(Object, String)}
	 */
	@Test
	public void testGetSimpleName() {
		assertThat(ClassUtils.getSimpleName(String.class), is("String"));
		assertThat(ClassUtils.getSimpleName(new String(), "nullValue"), is("String"));
	}

– static boolean isInnerClass(Class cls)

指定されたクラスが内部クラスであるかを返す。

	/**
	 * {@link ClassUtils#isInnerClass(Class)}
	 */
	@Test
	public void testIsInnerClass() {
		assertThat(ClassUtils.isInnerClass(InnerClass.class), is(true));
		assertThat(ClassUtils.isInnerClass(String.class), is(false));
	}

	class InnerClass {
	}

– static boolean isPrimitiveOrWrapper(Class type)
– static boolean isPrimitiveWrapper(Class type)

指定されたクラスが、プリミティブラッパークラスであるかを返す。

	/**
	 * {@link ClassUtils#isPrimitiveWrapper(Class)}
	 * {@link ClassUtils#isPrimitiveOrWrapper(Class)}
	 */
	@Test
	public void testIsPrimitiveOrWrapper() {
		assertThat(ClassUtils.isPrimitiveWrapper(Integer.class), is(true));
		assertThat(ClassUtils.isPrimitiveWrapper(ClassUtils.class), is(false));
		assertThat(ClassUtils.isPrimitiveOrWrapper(Integer.class), is(true));
		assertThat(ClassUtils.isPrimitiveOrWrapper(ClassUtils.class), is(false));
	}

– static Class primitiveToWrapper(Class cls)
– static Class[] primitivesToWrappers(Class… classes)

指定されたプリミティブクラスのラッパークラスを返す。

	/**
	 * {@link ClassUtils#primitiveToWrapper(Class)}
	 */
	@Test
	public void testPrimitiveToWrapper() {
		assertTrue(ClassUtils.primitiveToWrapper(boolean.class).equals(Boolean.class));
		assertTrue(ClassUtils.primitiveToWrapper(byte.class).equals(Byte.class));
		assertTrue(ClassUtils.primitiveToWrapper(short.class).equals(Short.class));
		assertTrue(ClassUtils.primitiveToWrapper(int.class).equals(Integer.class));
		assertTrue(ClassUtils.primitiveToWrapper(long.class).equals(Long.class));
		assertTrue(ClassUtils.primitiveToWrapper(float.class).equals(Float.class));
		assertTrue(ClassUtils.primitiveToWrapper(boolean.class).equals(Boolean.class));
		assertTrue(ClassUtils.primitiveToWrapper(char.class).equals(Character.class));
		assertTrue(ClassUtils.primitiveToWrapper(void.class).equals(Void.class));
	}

– static Class wrapperToPrimitive(Class cls)

指定されたラッパークラスのプリミティブクラスを返す。

	/**
	 * {@link ClassUtils#wrapperToPrimitive(Class)}
	 */
	@Test
	public void testWrapperToPrimitive() {
		assertTrue(ClassUtils.wrapperToPrimitive(Boolean.class).equals(boolean.class));
		assertTrue(ClassUtils.wrapperToPrimitive(Byte.class).equals(byte.class));
		assertTrue(ClassUtils.wrapperToPrimitive(Short.class).equals(short.class));
		assertTrue(ClassUtils.wrapperToPrimitive(Integer.class).equals(int.class));
		assertTrue(ClassUtils.wrapperToPrimitive(Long.class).equals(long.class));
		assertTrue(ClassUtils.wrapperToPrimitive(Float.class).equals(float.class));
		assertTrue(ClassUtils.wrapperToPrimitive(Boolean.class).equals(boolean.class));
		assertTrue(ClassUtils.wrapperToPrimitive(Character.class).equals(char.class));
		assertTrue(ClassUtils.wrapperToPrimitive(Void.class).equals(void.class));
	}

【Apache Commons Lang】いかがだったでしょうか。
次回も引き続き【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
Java Tips -=-= Library =-=- Apache Commons Lang Part 1
Java Tips -=-= Library =-=- Apache Commons Lang Part 2
Java Tips -=-= Library =-=- Apache Commons Lang Part 3