Google Guava 反射工具使用详解


反射

在 Guava 中,反射(Reflection)模块提供了一些用于简化反射操作的工具类和方法。通过 Guava 的反射模块,您可以方便地进行类、方法、字段的操作、获取注解信息等。下面详细介绍一些 Guava 反射模块的使用方法和示例。

类操作

  1. 使用 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>
    

方法操作

  1. 使用 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(); // 获取参数类型列表
    

字段操作

  1. 使用 FieldReflection 类可以获取和设置字段的值、获取字段的类型等信息:

    Field field = MyService.class.getField("myField");
    Object fieldValue = FieldReflection.getField(field, myServiceInstance); // 获取字段的值
    FieldReflection.setField(field, myServiceInstance, newValue); // 设置字段的值
    Type fieldType = FieldReflection.getFieldType(field).getType(); // 获取字段的类型
    

获取注解

  1. 使用 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);
           // 处理注解信息
       });
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值