首页 > 其他分享 >TypeResolver用法

TypeResolver用法

时间:2023-04-14 17:44:58浏览次数:36  
标签:resolve typeResolver new TypeResolver 用法 class memberResolver

1、List

1 TypeResolver typeResolver = new TypeResolver();
2 // listType => List<Object>
3 ResolvedType listType = typeResolver.resolve(List.class);

2、Map

1 class StringIntMap extends HashMap<String,Integer> { }
2 
3 TypeResolver typeResolver = new TypeResolver();
4 ResolvedType resolve = typeResolver.resolve(StringIntMap.class);
5 List<ResolvedType> resolvedTypes = resolve.typeParametersFor(Map.class);
6 System.out.println(resolvedTypes);

3、ArrayList<String>

1 TypeResolver typeResolver = new TypeResolver();
2 ResolvedType listType = typeResolver.resolve(List.class, String.class);
3 System.out.println(listType);

4、类成员函数和成员变量

 1 public class Student implements Serializable {
 2     private static final long serialVersionUID = -1L;
 3 
 4     private String name;
 5 
 6     private Integer age;
 7 
 8     private String classRoom;
 9     
10     ..............
11 }
12 
13 TypeResolver typeResolver = new TypeResolver();
14 ResolvedType resolve = typeResolver.resolve(Student.class);
15 MemberResolver memberResolver = new MemberResolver(typeResolver);
16 ResolvedTypeWithMembers arrayListTypeWithMembers = memberResolver.resolve(
17         resolve, null, null);
18 ResolvedMethod[] arrayListMethods = arrayListTypeWithMembers.getMemberMethods();
19 ResolvedField[] memberFields = arrayListTypeWithMembers.getMemberFields();

5、成员函数过滤

 1 TypeResolver typeResolver = new TypeResolver();
 2 ResolvedType arrayListType = typeResolver.resolve(ArrayList.class, String.class);
 3 MemberResolver memberResolver = new MemberResolver(typeResolver);
 4 memberResolver.setMethodFilter(new Filter<RawMethod>() {
 5     @Override
 6     public boolean include(RawMethod element) {
 7         return "size".equals(element.getName());
 8     }
 9 });
10 ResolvedTypeWithMembers arrayListTypeWithMembers = memberResolver.resolve(arrayListType, null, null);
11 ResolvedMethod sizeMethod = arrayListTypeWithMembers.getMemberMethods()[0];

6、成员变量过滤

TypeResolver typeResolver = new TypeResolver();
ResolvedType arrayListType = typeResolver.resolve(ArrayList.class, String.class);
MemberResolver memberResolver = new MemberResolver(typeResolver);
memberResolver.setFieldFilter(new Filter<RawField>() {
    @Override
    public boolean include(RawField element) {
        return "size".equals(element.getName());
    }
});
ResolvedTypeWithMembers arrayListTypeWithMembers = memberResolver.resolve(arrayListType, null, null);
ResolvedField sizeField = arrayListTypeWithMembers.getMemberFields()[0];

7、注解解析

 1 @Retention(RetentionPolicy.RUNTIME)
 2 @interface Marker { }
 3 
 4 @Retention(RetentionPolicy.RUNTIME)
 5 @Inherited
 6 @interface MarkerA { }
 7 
 8 class SomeClass {
 9     @Marker @MarkerA
10     public void someMethod() { }
11 }
12 class SomeSubclass extends SomeClass {
13     @Override
14     public void someMethod() { }
15 }
16 
17 
18 TypeResolver typeResolver = new TypeResolver();
19 ResolvedType someType = typeResolver.resolve(SomeClass.class);
20 MemberResolver memberResolver = new MemberResolver(typeResolver);
21 memberResolver.setMethodFilter(new Filter<RawMethod>() {
22     @Override public boolean include(RawMethod element) {
23         return "someMethod".equals(element.getName());
24     }
25 });
26 AnnotationConfiguration annConfig = new AnnotationConfiguration.StdConfiguration(AnnotationInclusion.INCLUDE_BUT_DONT_INHERIT);
27 ResolvedTypeWithMembers someTypeWithMembers = memberResolver.resolve(someType, annConfig, null);
28 ResolvedMethod someMethod = someTypeWithMembers.getMemberMethods()[0];
29 Marker marker = someMethod.get(Marker.class);  // marker != null
30 MarkerA markerA = someMethod.get(MarkerA.class); // markerA != null

 

标签:resolve,typeResolver,new,TypeResolver,用法,class,memberResolver
From: https://www.cnblogs.com/laoxia/p/17319075.html

相关文章

  • re.findall()用法详解-返回string中所有与pattern相匹配的全部字串
    re.findall():函数返回包含所有匹配项的列表。返回string中所有与pattern相匹配的全部字串,返回形式为数组。  示例代码1:【打印所有的匹配项】   importre       s="Longlivethepeople'sRepublicofChina"   ret=re.findall('h',s)       ......
  • 逍遥自在学C语言 | 位运算符~的高级用法
    前言在上一篇文章中,我们介绍了^运算符的高级用法,本篇文章,我们将介绍~运算符的一些高级用法。一、人物简介第一位闪亮登场,有请今后会一直教我们C语言的老师——自在。第二位上场的是和我们一起学习的小白程序猿——逍遥。二、相反数我们可以利用负数的补码性......
  • 斯坦福 UE4 C++ ActionRoguelike游戏实例教程 10.控制台变量的用法 & 静态函数库 &
    斯坦福课程UE4C++ActionRoguelike游戏实例教程0.绪论概述本文对应Lecture15,61-ConsoleVariablesfordebuggingandgamebalancing。本文将会教你如何在C++中编辑控制台变量的逻辑,通过在游戏中打开控制台,以修改控制台变量的方式来修改游戏里的各种参数;此外,还会使用自......
  • 详解Django admin高级用法
    Django后台admin有大量的属性和方法,拥有强大的功能和自定义能力.通过完整的代码来看Djangoadmin的基础设置和高级用法,并结合form表单来实现深度自定义.简单使用如果只是使用admin自带的数据管理功能,只需要将模型注册到admin中,就可以实现.fromdjango.contribimportadmi......
  • python compile函数用法
    将文本代码编译成Python可执行代码,这个代码对象可以通过eval()或exec()函数执行。compile()函数的语法如下:compile(source,filename,mode,flags=0,dont_inherit=False,optimize=-1)参数说明:source:必选.必须是一个字符串,表示要编译的代码。filename:必选? 表示......
  • PHP中$_SERVER用法
    $_SERVER['PHP_SELF']#当前正在执行脚本的文件名,与documentroot相关。$_SERVER['argv']#传递给该脚本的参数。$_SERVER['argc']#包含传递给程序的命令行参数的个数(如果运行在命令行模式)。$_SERVER['GATEWAY_INTERFACE']#服务器使用的CGI规范的版本。例如,“CGI/1.1”。$_SE......
  • Chapter2 figure 基本用法
    figure基本用法importmatplotlib.pyplotaspltimportnumpyasnp#figure可以理解为表示图像的窗口#我们可以创建多个窗口#该代码的作用就是将每一个函数都分别显示在单独的figure中x=np.linspace(-3,3,50)y1=2*x+1y2=x**2'''figure参数有:第一个:num......
  • 最高法、河南高院--对主体质量问题的返修责任不属于从给付义务,可以适用法律关于履行抗
    (2020)最高法民终928号  吉林省筑居房地产开发有限公司、中建二局第一建筑工程有限公司建设工程施工合同纠纷二审民事裁定书本院认为:建设工程的质量就是生命。吉林省宏盛工程检测有限公司对案涉工程二期地下车库进行质量检测所出具的SFJD字2018第0032号《司法鉴定意见书》已经明......
  • where 和 having 的用法区别
    where:用于过滤数据行;数据分组前进行过滤where中不能使用聚合函数;where是在结果返回之前起作用的;having:用于过滤分组;数据分组后进行过滤在having中可以使用聚合函数;where和having的执行顺序:where早于groupby早于having。having和groupby搭配使用,having后跟......
  • Mybatis中 ${} 和 #{} 的用法与区别
    #{}:将传入的数据都当成一个字符串,会对传入的变量自动加一个单引号。如:user_id=#{userId},如果传入的值是111,那么解析成sql时的值为user_id='111',如果传入的值是id,则解析成的sql为user_id='id'。${}:将传入的参数直接显示生成在sql中,且不加任何引号。如:user_id=${userId},如......