return list;
}
/**
* 获取所有属性
*
* @return 所有的属性【每一个属性添加到StringBuilder中,最后保存到一个List集合中】
*/
public static List<StringBuilder> getFields(Class<?> clazz) {
Field[] fields = clazz.getDeclaredFields();
int len = fields.length;
List<StringBuilder> list = new ArrayList<StringBuilder>();
StringBuilder sb = null;
for (int i = 0; i < len; i++) {
Field field = fields[i];
sb = new StringBuilder();
// 修饰符
String modifier = Modifier.toString(field.getModifiers());
sb.append(modifier + " ");
// 数据类型
Class<?> type = field.getType();
String typeName = type.getSimpleName();
sb.append(typeName + " ");
// 属性名
String fieldName = field.getName();
sb.append(fieldName + ";");
list.add(sb);
}
return list;
}
/**
* 获取所有公共的属性
*
* @return 所有公共的属性【每一个属性添加到StringBuilder中,最后保存到一个List集合中】
*/
public static List<StringBuilder> getPublicFields(Class<?> clazz) {
Field[] fields = clazz.getFields();
int len = fields.length;
List<StringBuilder> list = new ArrayList<StringBuilder>();
StringBuilder sb = null;
for (int i = 0; i < len; i++) {
Field field = fields[i];
sb = new StringBuilder();
// 修饰符
String modifier = Modifier.toString(field.getModifiers());
sb.append(modifier + " ");
// 数据类型
Class<?> type = field.getType();
String typeName = type.getSimpleName();
sb.append(typeName + " ");
// 属性名
String fieldName = field.getName();
sb.append(fieldName + ";");
list.add(sb);
}
return list;
}
/**
* 获取所有构造方法
*
* @return 所有的构造方法【每一个构造方法添加到StringBuilder中,最后保存到一个List集合中】
*/
public static List<StringBuilder> getConstructors(Class<?> clazz) {
Constructor<?>[] constructors = clazz.getDeclaredConstructors();
int len = constructors.length;
List<StringBuilder> list = new ArrayList<StringBuilder>();
StringBuilder sb = null;
for (int i = 0; i < len; i++) {
Constructor<?> constructor = constructors[i];
sb = new StringBuilder();
// 修饰符
String modifier = Modifier.toString(constructor.getModifiers());
sb.append(modifier + " ");
// 方法名(类名)
String constructorName = clazz.getSimpleName();
sb.append(constructorName + " (");
// 形参列表
Class<?>[] parameterTypes = constructor.getParameterTypes();
int length = parameterTypes.length;
for (int j = 0; j < length; j++) {
Class<?> parameterType = parameterTypes[j];
String parameterTypeName = parameterType.getSimpleName();
if (j < length - 1) {
sb.append(parameterTypeName + ", ");
} else {
sb.append(parameterTypeName);
}
}
sb.append(") {}");
list.add(sb);
}
return list;
}
/**
* 获取所有自身的方法
*
* @return 所有自身的方法【每一个方法添加到StringBuilder中,最后保存到一个List集合中】
*/
public static List<StringBuilder> getMethods(Class<?> clazz) {
Method[] methods = clazz.getDeclaredMethods();
int len = methods.length;
List<StringBuilder> list = new ArrayList<StringBuilder>();
StringBuilder sb = null;
for (int i = 0; i < len; i++) {
Method method = methods[i];
sb = new StringBuilder();
// 修饰符
String modifier = Modifier.toString(method.getModifiers());
sb.append(modifier + " ");
// 返回值类型
Class<?> returnClass = method.getReturnType();
String returnType = returnClass.getSimpleName();
sb.append(returnType + " ");
// 方法名
String methodName = method.getName();
sb.append(methodName + " (");
// 形参列表
Class<?>[] parameterTypes = method.getParameterTypes();
int length = parameterTypes.length;
for (int j = 0; j < length; j++) {
Class<?> parameterType = parameterTypes[j];
// 形参类型
String parameterTypeName = parameterType.getSimpleName();
if (j < length - 1) {
sb.append(parameterTypeName + ", ");
} else {
sb.append(parameterTypeName);
}
}
sb.append(") {}");
list.add(sb);
}
return list;
}
/**
* 获取所有公共的方法
*
* @return 所有公共的方法【每一个方法添加到StringBuilder中,最后保存到一个List集合中】
*/
public static List<StringBuilder> getPublicMethods(Class<?> clazz) {
Method[] methods = clazz.getMethods();
int len = methods.length;
List<StringBuilder> list = new ArrayList<StringBuilder>();
StringBuilder sb = null;
for (int i = 0; i < len; i++) {
Method method = methods[i];
sb = new StringBuilder();
// 修饰符
String modifier = Modifier.toString(method.getModifiers());
sb.append(modifier + " ");
// 返回值类型
Class<?> returnClass = method.getReturnType();
String returnType = returnClass.getSimpleName();
sb.append(returnType + " ");
// 方法名
String methodName = method.getName();
sb.append(methodName + " (");
// 形参列表
Class<?>[] parameterTypes = method.getParameterTypes();
int length = parameterTypes.length;
for (int j = 0; j < length; j++) {
Class<?> parameterType = parameterTypes[j];
// 形参类型
String parameterTypeName = parameterType.getSimpleName();
if (j < length - 1) {
sb.append(parameterTypeName + ", ");
} else {
sb.append(parameterTypeName);
}
}
sb.append(") {}");
list.add(sb);
}
return list;
}
/**
* 获取所有的注解名
*
* @return 所有的注解名【每一个注解名的类型为String,最后保存到一个List集合中】
*/
public static List<String> getAnnotations(Class<?> clazz) {
Annotation[] annotations = clazz.getAnnotations();
int len = annotations.length;
List<String> list = new ArrayList<String>();
for (int i = 0; i < len; i++) {
Annotation annotation = annotations[i];
String annotationName = annotation.annotationType().getSimpleName();
list.add(annotationName);
}
return list;
}
/**
* 获取父类的泛型
*
* @return 父类的泛型【Class类型】
*/
public static Class<?> getSuperClassGenericParameterizedType(Class<?> clazz) {
Type genericSuperClass = clazz.getGenericSuperclass();
Class<?> superClassGenericParameterizedType = null;
// 判断父类是否有泛型
if (genericSuperClass instanceof ParameterizedType) {
// 向下转型,以便调用方法
ParameterizedType pt = (ParameterizedType) genericSuperClass;
// 只取第一个,因为一个类只能继承一个父类
Type superClazz = pt.getActualTypeArguments()[0];
// 转换为Class类型
superClassGenericParameterizedType = (Class<?>) superClazz;
}
return superClassGenericParameterizedType;
}
/**
* 获取接口的所有泛型
*
* @return 所有的泛型接口【每一个泛型接口的类型为Class,最后保存到一个List集合中】
*/
public static List<Class<?>> getInterfaceGenericParameterizedTypes(Class<?> clazz) {
Type[] genericInterfaces = clazz.getGenericInterfaces();
int len = genericInterfaces.length;
List<Class<?>> list = new ArrayList<Class<?>>();
for (int i = 0; i < len; i++) {
Type genericInterface = genericInterfaces[i];
// 判断接口是否有泛型
if (genericInterface instanceof ParameterizedType) {
ParameterizedType pt = (ParameterizedType) genericInterface;
// 得到所有的泛型【Type类型的数组】
Type[] interfaceTypes = pt.getActualTypeArguments();
int length = interfaceTypes.length;
for (int j = 0; j < length; j++) {
// 获取对应的泛型【Type类型】
Type interfaceType = interfaceTypes[j];
// 转换为Class类型
Class<?> interfaceClass = (Class<?>) interfaceType;
list.add(interfaceClass);
}
}
}
return list;
}
/**
* 打印包名
*/
public static void printPackage(Class<?> clazz) {
System.out.println(getPackage(clazz));
}
/**
* 打印继承的父类的全类名
*/
public static void printSuperClassName(Class<?> clazz) {
System.out.println(getSuperClassName(clazz));
}
/**
* 打印全类名
*/
public static void printClassName(Class<?> clazz) {
System.out.println(getClassName(clazz));
}
/**
* 打印实现的接口
*/
public static void printInterfaces(Class<?> clazz) {
List<String> list = getInterfaces(clazz);
int size = list.size();
if (0 < size) {
for (int i = 0; i < size; i++) {
System.out.println(list.get(i));
}
} else {
System.out.println("没有实现接口!");
}
}
/**
* 打印所有属性
*/
public static void printFields(Class<?> clazz) {
List<StringBuilder> list = getFields(clazz);
int size = list.size();
if (0 < size) {
for (int i = 0; i < size; i++) {
System.out.println(list.get(i));
}
} else {
System.out.println("没有属性!");
}
}
/**
* 打印所有公共的属性
*/
public static void printPublicFields(Class<?> clazz) {
List<StringBuilder> list = getPublicFields(clazz);
int size = list.size();
if (0 < size) {
for (int i = 0; i < size; i++) {
System.out.println(list.get(i));
}
} else {
System.out.println("没有属性!");
}
}
/**
* 打印所有构造方法
*/
public static void printConstructors(Class<?> clazz) {
List<StringBuilder> list = getConstructors(clazz);
int size = list.size();
if (0 < size) {
for (int i = 0; i < size; i++) {
System.out.println(list.get(i));
}
} else {
System.out.println("没有构造方法!");
}
}
/**
* 打印所有方法
*/
public static void printMethods(Class<?> clazz) {
List<StringBuilder> list = getMethods(clazz);
int size = list.size();
if (0 < size) {
for (int i = 0; i < size; i++) {
System.out.println(list.get(i));
}
} else {
System.out.println("没有方法!");
}
}
/**
* 打印所有公共的方法
*/
public static void printPublicMethods(Class<?> clazz) {
List<StringBuilder> list = getPublicMethods(clazz);
int size = list.size();
if (0 < size) {
for (int i = 0; i < size; i++) {
System.out.println(list.get(i));
}
} else {
System.out.println("没有方法!");
}
}
/**
* 打印所有的注解
*/
public static void printAnnotations(Class<?> clazz) {
List<String> list = getAnnotations(clazz);
int size = list.size();
if (0 < size) {
for (int i = 0; i < size; i++) {
System.out.println(list.get(i));
}
} else {
System.out.println("没有注解!");
}
}
/**
* 打印父类的泛型名
*/
public static void printSuperClassGenericParameterizedType(Class<?> clazz) {
Class<?> superClassGenericParameterizedType = getSuperClassGenericParameterizedType(clazz);
if (null != superClassGenericParameterizedType) {
System.out.println(superClassGenericParameterizedType.getSimpleName());
} else {
System.out.println("父类没有泛型!");
}
}
/**
* 打印接口的泛型
*/
public static void printInterfaceGenericParameterizedTypes(Class<?> clazz) {
List<Class<?>> list = getInterfaceGenericParameterizedTypes(clazz);
int size = list.size();
if (0 < size) {
for (int i = 0; i < size; i++) {
System.out.println(list.get(i).getSimpleName());
}
} else {
System.out.println("没有泛型接口!");
感受:
其实我投简历的时候,都不太敢投递阿里。因为在阿里一面前已经过了字节的三次面试,投阿里的简历一直没被捞,所以以为简历就挂了。
特别感谢一面的面试官捞了我,给了我机会,同时也认可我的努力和态度。对比我的面经和其他大佬的面经,自己真的是运气好。别人8成实力,我可能8成运气。所以对我而言,我要继续加倍努力,弥补自己技术上的不足,以及与科班大佬们基础上的差距。希望自己能继续保持学习的热情,继续努力走下去。
也祝愿各位同学,都能找到自己心动的offer。
分享我在这次面试前所做的准备(刷题复习资料以及一些大佬们的学习笔记和学习路线),都已经整理成了电子文档
CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】
tln(superClassGenericParameterizedType.getSimpleName());
} else {
System.out.println("父类没有泛型!");
}
}
/**
* 打印接口的泛型
*/
public static void printInterfaceGenericParameterizedTypes(Class<?> clazz) {
List<Class<?>> list = getInterfaceGenericParameterizedTypes(clazz);
int size = list.size();
if (0 < size) {
for (int i = 0; i < size; i++) {
System.out.println(list.get(i).getSimpleName());
}
} else {
System.out.println("没有泛型接口!");
感受:
其实我投简历的时候,都不太敢投递阿里。因为在阿里一面前已经过了字节的三次面试,投阿里的简历一直没被捞,所以以为简历就挂了。
特别感谢一面的面试官捞了我,给了我机会,同时也认可我的努力和态度。对比我的面经和其他大佬的面经,自己真的是运气好。别人8成实力,我可能8成运气。所以对我而言,我要继续加倍努力,弥补自己技术上的不足,以及与科班大佬们基础上的差距。希望自己能继续保持学习的热情,继续努力走下去。
也祝愿各位同学,都能找到自己心动的offer。
分享我在这次面试前所做的准备(刷题复习资料以及一些大佬们的学习笔记和学习路线),都已经整理成了电子文档
CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】