今天我们开始学习,commons-lang3包下的反射工具类,大家在开发web项目时,用到的框架,spring,mybatis,hibernate,以及现在已经淡出大家视野的struts等,底层的原理都是使用了java反射机制,所谓java反射,就是把java类,接口,成员变量,方法等都抽象成对象的机制,而commons-lang3包下提供的工具类,更简单,容易的操作这些对象,我们就用几个代码示例,来了解下ClassUtils类。
ClassUtils
是取得类信息的工具类,例如,包名,类名,所继承的父类,所实现的接口信息等。
常用方法
- 包名取得
使用ClassUtils#getPackageName方法,参数可以传入Class类型或者String类型
package ClassUtilsTest;
import org.apache.commons.lang3.ClassUtils;
public class GetPackageNameTest{
public static void main(String[] args) {
System.err.println(ClassUtils.getPackageName(String.class));
System.err.println(ClassUtils.getPackageName("java.lang.String"));}
}
输出结果
java.lang
java.lang
- 类名取得
使用ClassUtils#getShortClassName方法,参数可以传入Class类型或者String类型
package ClassUtilsTest;
import org.apache.commons.lang3.ClassUtils;
public class GetShortClassNameTest {
public static void main(String[] args) {
System.err.println(ClassUtils.getShortClassName(String.class));
System.err.println(ClassUtils.getShortClassName("java.lang.String"));}
}
输出结果
String
String
- 实现的所有接口名取得(带包名)
包括父接口实现的接口名,使用ClassUtils#getAllInterfaces方法,参数可以传入Class类型
package ClassUtilsTest;
import java.util.ArrayList;
import org.apache.commons.lang3.ClassUtils;
public class GetAllInterfacesTest {
public static void main(String[] args) {
ClassUtils.getAllInterfaces(ArrayList.class).forEach(System.err::println);
}
}
输出结果
interface java.util.List
interface java.util.Collection
interface java.lang.Iterable
interface java.util.RandomAccess
interface java.lang.Cloneable
interface java.io.Serializable
- 继承父类名取得(带包名)
包括父类继承的父类名,使用ClassUtils#getAllSuperclasses方法,参数可以传入Class类型
package ClassUtilsTest;
import java.util.ArrayList;
import org.apache.commons.lang3.ClassUtils;
public class GetAllSuperclassesTest {
public static void main(String[] args) {
ClassUtils.getAllSuperclasses(ArrayList.class).forEach(System.err::println);
}
}
输出结果
class java.util.AbstractList
class java.util.AbstractCollection
class java.lang.Object
当我们写框架,工具类的时候能使用到这些方法,下篇见。