Google Guava 反射工具使用详解
文章目录
- 反射
- 类操作
- 方法操作
- 字段操作
- 获取注解
反射
在 Guava 中,反射(Reflection)模块提供了一些用于简化反射操作的工具类和方法。通过 Guava 的反射模块,您可以方便地进行类、方法、字段的操作、获取注解信息等。下面详细介绍一些 Guava 反射模块的使用方法和示例。
类操作
-
使用 TypeToken 类可以获取类的类型信息,包括泛型类型:
TypeToken<String> stringToken = TypeToken.of(String.class); TypeToken<List<String>> listToken = new TypeToken<List<String>>() {}; Class<?> stringClass = stringToken.getRawType(); // 获取原始类型,结果为 class java.lang.String Type stringType = stringToken.getType(); // 获取类型,结果为 java.lang.String Type listType = listToken.getType(); // 获取类型,结果为 java.util.List<java.lang.String>
方法操作
-
使用 Invokable 类可以调用方法、获取方法的参数和返回值类型等信息:
Method method = MyService.class.getMethod("myMethod", String.class, int.class); Invokable<?, ?> invokable = Invokable.from(method); Object result = invokable.invoke(myServiceInstance, "param1", 123); // 调用方法 Type returnType = invokable.getReturnType().getType(); // 获取返回值类型 List<TypeToken<?>> parameterTypes = invokable.getParameterTypes(); // 获取参数类型列表
字段操作
-
使用 FieldReflection 类可以获取和设置字段的值、获取字段的类型等信息:
Field field = MyService.class.getField("myField"); Object fieldValue = FieldReflection.getField(field, myServiceInstance); // 获取字段的值 FieldReflection.setField(field, myServiceInstance, newValue); // 设置字段的值 Type fieldType = FieldReflection.getFieldType(field).getType(); // 获取字段的类型
获取注解
- 使用 AnnotationScanner 类可以扫描类或方法上的注解,并获取注解的信息:
ImmutableList<Class<? extends Annotation>> annotations = ImmutableList.of(MyAnnotation.class); AnnotationScanner.scanClasspath(ClasspathHelper.forPackage("com.example")) .annotatedWithAny(annotations) .forEach(cls -> { MyAnnotation myAnnotation = cls.getAnnotation(MyAnnotation.class); // 处理注解信息 });