关键代码:
-
Modifier.isPublic(field.getModifiers()) 判断是否是public
-
Modifier.isStatic(field.getModifiers()) 判断是否是static
-
field.getGenericType() 获取变量类型
实现代码如下:
public class MediaType {
public static int MP3 = 0x2348;
public static int MP4 = 0x2315;
public static int AVI = 0x4356;
}
public class Test {
public static void main(String[] args) {
Map<Integer, String> fieldMap = getAllPublicStaticIntField(MediaType.class);
for (Map.Entry<Integer, String> entry : fieldMap.entrySet()) {
System.out.println(entry.getKey() + " : " + entry.getValue());
}
}
public static Map<Integer, String> getAllPublicStaticIntField(Class<?> clazz) {
Map<Integer, String> fieldsMap = new HashMap<>();
try {
Field[] fields = clazz.getFields();
for (Field field : fields) {
int modifiers = field.getModifiers();
boolean isPublic = Modifier.isPublic(modifiers);
boolean isStatic = Modifier.isStatic(modifiers);
boolean isInt = field.getGenericType() == int.class;
if (isPublic && isStatic && isInt) {
fieldsMap.put((Integer) field.get(null), field.getName());
}
}
} catch (Exception e) {
e.printStackTrace();
}
return fieldsMap;
}
}
输出结果如下:
8981 : MP4
17238 : AVI
9032 : MP3
OK,三个静态变量都拿到了,当我们得到一个type值为8981,我们不用自己去代码中对比它是哪个类型的值了,直接用代码打印出来即可,如下:
public static void main(String[] args) {
int type = 8981;
String fieldName = getAllPublicStaticIntField(MediaType.class).get(type);
System.out.println(type + " is " + fieldName);
}
输出如下:
8981 is MP4
注:我发现一个Bug,当我把变量的值设置为0时,则只能获取到一个变量,示例如下:
public class MediaType {
public static int MP3 = 0;
public static int MP4 = 0;
public static int AVI = 0;
}
public class Test {
public static void main(String[] args) {
Map<Integer, String> fieldMap = getAllPublicStaticIntField(MediaType.class);
for (Map.Entry<Integer, String> entry : fieldMap.entrySet()) {
System.out.println(entry.getKey() + " : " + entry.getValue());
}
}
public static Map<Integer, String> getAllPublicStaticIntField(Class<?> clazz) {
Map<Integer, String> fieldsMap = new HashMap<>();
...
return fieldsMap;
}
}
最后总结
搞定算法,面试字节再不怕,有需要文章中分享的这些二叉树、链表、字符串、栈和队列等等各大面试高频知识点及解析
最后再分享一份终极手撕架构的大礼包(学习笔记):分布式+微服务+开源框架+性能优化
rn fieldsMap;
}
}
# 最后总结
搞定算法,面试字节再不怕,有需要文章中分享的这些**二叉树、链表、字符串、栈和队列等等各大面试高频知识点及解析**
最后再分享一份**终极手撕架构的大礼包(学习笔记):分布式+微服务+开源框架+性能优化**
[外链图片转存中...(img-7O4OLzmj-1714394573484)]
> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/topics/618154847)收录**