网站栏目策划 有思想的新闻,天元建设集团有限公司第四建筑工程公司,小说写作网站,wordpress教程 网站标题Class类中包含了类定义的详细信息#xff0c;可以使用Class类中提供的方法来获取#xff0c;下面我们先获取Class对象#xff0c;再介绍Class类中提供的获取类信息的方法。
一、准备工作
在src/test/java目录的cn.horse.reflect.entity包下新建BaseEntity类、UserInfoEnti…Class类中包含了类定义的详细信息可以使用Class类中提供的方法来获取下面我们先获取Class对象再介绍Class类中提供的获取类信息的方法。
一、准备工作
在src/test/java目录的cn.horse.reflect.entity包下新建BaseEntity类、UserInfoEntity类
BaseEntity类
package cn.horse.reflect.entity;public abstract class BaseEntity {public Long id;public BaseEntity() { }public BaseEntity(Long id) {this.id id;}public void setId(Long id) {this.id id;}public Long getId() {return id;}
}UserInfoEntity类
package cn.horse.reflect.entity;SuppressWarnings({})
public class UserInfoEntity extends BaseEntity {public String name;private Integer age;private UserInfoEntity() {}public UserInfoEntity(Long id) {super(id);}public UserInfoEntity(Long id, String name, Integer age) {super(id);this.name name;this.age age;}public void setAge(Integer age) {this.age age;}public Integer getAge() {return age;}private String getName() {return name;}private void check() { }
}二、获取Class对象的三种方式
在src/test/java目录的cn.horse.reflect包下新建GetClassInstanceTests测试类
GetClassInstanceTests类
package cn.horse.reflect;import cn.horse.reflect.entity.UserInfoEntity;
import org.junit.jupiter.api.Test;import static org.assertj.core.api.Assertions.assertThat;public class GetClassInstanceTests {Testpublic void testGetClassInstanceByBusObjectInstance() {assertThat(new UserInfoEntity(1L).getClass()).isNotNull();}Testpublic void testGetClassInstanceByBusClass() {assertThat(UserInfoEntity.class).isNotNull();}Testpublic void testGetClassInstanceByName() throws ClassNotFoundException {assertThat(Class.forName(cn.horse.reflect.entity.UserInfoEntity, false, this.getClass().getClassLoader())).isNotNull();}Testpublic void testClassInstanceEquals() throws ClassNotFoundException {Class? forNameType Class.forName(cn.horse.reflect.entity.UserInfoEntity, false, this.getClass().getClassLoader());Class? dotClassType UserInfoEntity.class;Class? objectGetClassType new UserInfoEntity(1L).getClass();assertThat(forNameType).isEqualTo(dotClassType);assertThat(dotClassType).isEqualTo(objectGetClassType);assertThat(forNameType).isEqualTo(objectGetClassType);}
}单元测试方法介绍
testGetClassInstanceByBusObjectInstance使用对象的实例获取Class对象
testGetClassInstanceByBusClass使用类获取Class对象
testGetClassInstanceByName使用全限类名获取Class对象
testClassInstanceEquals判断三种方法获取到的Class对象是否相等
单元测试中使用了三种方式获取Class对象三种方式获取到的Class对象是相等的。
三、Class类中方法的使用
在src/test/java目录的cn.horse.reflect包下新建ClassInstanceMethodTests测试类
ClassInstanceMethodTests类
package cn.horse.reflect;import cn.horse.reflect.entity.BaseEntity;
import cn.horse.reflect.entity.UserInfoEntity;
import org.junit.jupiter.api.Test;import java.lang.reflect.Modifier;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Locale;import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;public class ClassInstanceMethodTests {Testpublic void testGetName() {assertThat(UserInfoEntity.class.getSimpleName()).isEqualTo(UserInfoEntity);assertThat(UserInfoEntity.class.getName()).isEqualTo(cn.horse.reflect.entity.UserInfoEntity);assertThat(UserInfoEntity.class.getPackage().getName()).isEqualTo(cn.horse.reflect.entity);}Testpublic void testPrimitive() {assertThat(byte.class.isPrimitive()).isTrue();assertThat(short.class.isPrimitive()).isTrue();assertThat(int.class.isPrimitive()).isTrue();assertThat(long.class.isPrimitive()).isTrue();assertThat(float.class.isPrimitive()).isTrue();assertThat(double.class.isPrimitive()).isTrue();assertThat(boolean.class.isPrimitive()).isTrue();assertThat(void.class.isPrimitive()).isTrue();assertThat(int[].class.isPrimitive()).isFalse();assertThat(String.class.isPrimitive()).isFalse();assertThat(UserInfoEntity.class.isPrimitive()).isFalse();}Testpublic void testArray() {assertThat(String[].class.isArray()).isTrue();assertThat(String[].class.getComponentType()).isEqualTo(String.class);}Testpublic void testEnum() {assertThat(Locale.Category.class.isEnum()).isTrue();CollectionLocale.Category enumConstantList Arrays.asList(Locale.Category.class.getEnumConstants());ListLocale.Category expectedEnumConstantList Arrays.asList(Locale.Category.values());assertThat(enumConstantList.size()).isEqualTo(expectedEnumConstantList.size());assertThat(enumConstantList).containsAll(expectedEnumConstantList);}Testpublic void testAnnotation() {assertThat(SuppressWarnings.class.isAnnotation()).isTrue();}Testpublic void testLocalClass() {// 定义局部类class LocalClass {}assertThat(LocalClass.class.isLocalClass()).isTrue();}Testpublic void testAnonymousClass() {Runnable unknownClass new Runnable() {Overridepublic void run() {}};assertThat(unknownClass.getClass().isAnonymousClass()).isTrue();}Testpublic void testMemberClass() {assertThat(UserInfoEntity.class.isMemberClass()).isFalse();assertThat(InnerClass.class.isMemberClass()).isTrue();assertThat(StaticInnerClass.class.isMemberClass()).isTrue();// 定义局部类class LocalClass {}assertThat(LocalClass.class.isMemberClass()).isFalse();// 匿名类Runnable unknownClass new Runnable() {Overridepublic void run() {}};assertThat(unknownClass.getClass().isMemberClass()).isFalse();}Testpublic void testGetModifiers() {assertThat(Modifier.isPublic(UserInfoEntity.class.getModifiers())).isTrue();assertThat(Modifier.isProtected(UserInfoEntity.class.getModifiers())).isFalse();assertThat(Modifier.isPrivate(UserInfoEntity.class.getModifiers())).isFalse();assertThat(Modifier.isAbstract(UserInfoEntity.class.getModifiers())).isFalse();assertThat(Modifier.isInterface(UserInfoEntity.class.getModifiers())).isFalse();assertThat(Modifier.isStatic(UserInfoEntity.class.getModifiers())).isFalse();assertThat(Modifier.isFinal(UserInfoEntity.class.getModifiers())).isFalse();assertThat(Modifier.isNative(UserInfoEntity.class.getModifiers())).isFalse();}Testpublic void testStaticInnerClass() {assertThat(Modifier.isStatic(StaticInnerClass.class.getModifiers())).isTrue();}Testpublic void testInnerClass() {assertThat(InnerClass.class.isMemberClass() !Modifier.isStatic(InnerClass.class.getModifiers())).isTrue();}private static class StaticInnerClass { }private class InnerClass { }Testpublic void testTypeConvert() {assertThat(UserInfoEntity.class.isInstance(new UserInfoEntity(1L))).isTrue();assertThat(BaseEntity.class.isInstance(new UserInfoEntity(1L))).isTrue();assertThat(UserInfoEntity.class.isAssignableFrom(UserInfoEntity.class)).isTrue();assertThat(BaseEntity.class.isAssignableFrom(UserInfoEntity.class)).isTrue();assertThat(BaseEntity.class.cast(new UserInfoEntity(1L))).isNotNull();assertThatExceptionOfType(ClassCastException.class).isThrownBy(() - BaseEntity.class.cast(1));}
}单元测试类中定义了两个内部类静态内部类StaticInnerClass、内部类InnerClass
单元测试方法介绍
testGetName获取类名称其中getSimpleName用于获取简略名称getName用于获取全限类名getPackage用于获取包对象
testPrimitive判断是否是基本数据类型使用isPrimitive方法判断是否是基本数据类型byte,short,int,long,float,double,Boolean,void
testArray判断并获取数组元素类型使用isArray判断是否是数组类型使用getComponentType获取数组元素类型
testEnum判断并获取枚举常量数组使用isEnum判断是否是枚举类型使用getEnumConstants获取枚举常量数组
testAnnotation判断是否是注解类型使用isAnnotation判断是否是注解类型
testLocalClass判断是否是局部类使用isLocalClass判断是否是局部类
testAnonymousClass判断是否是匿名类使用isAnonymousClass判断是否是匿名类
testMemberClass判断是否是成员类使用isMemberClass判断是否是成员类内部类、静态内部类都属于成员类局部类、匿名类都不属于成员类
testGetModifiers获取修饰符使用getModifiers获取修饰符并使用Modifier类提供的静态方法依次判断了是否使用了public、protected、private、abstract、interface、static、final、native等修饰符
testStaticInnerClass判断是否是静态内部类使用getModifiers获取修饰符并使用Modifier类提供的静态方法判断是否使用了static修饰符
testInnerClass判断是否是内部类判断是否是成员类并且没有使用static修饰符
testTypeConvert类型判断与转换使用isInstance或isAssignableFrom可以判断类型是否可以转换使用cast可以进行类型的转换。