反射

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

类操作

  1. 使用 TypeToken 类可以获取类的类型信息,包括泛型类型

    TypeToken<String> stringToken = TypeToken.of(String.class);
    TypeToken&lt;List&lt;String&gt;&gt; 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);
           // 处理注解信息
       });
    

原文地址:https://blog.csdn.net/JokerLJG/article/details/134614450

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_36452.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注