通过getter获取setter函数

简介: 通过getter获取setter函数

勤劳的家庭,饥饿过其门而不入。——富兰克林

分享一个通过getter获取setter函数

放在:https://gitee.com/dromara/stream-query

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/**
 * 通过getter获取setter
 *
 * @param getter getter对应的lambda
 * @param <T>    getter参数类型
 * @param <R>    property类型
 * @return 返回setter对应的lambda
 */
publicstatic <T, R> SerBiCons<T, R> getSetter(SerFunc<T, R> getter) {
return getSetter(getter, SerBiCons.class);
}
/**
 * 通过getter获取setter
 *
 * @param getter     getter对应的lambda
 * @param lambdaType setter对应的lambda类型
 * @param <F>        getter对应的lambda类型
 * @param <C>        setter对应的lambda类型
 * @return 返回setter对应的lambda
 */
publicstatic <F extendsSerializable, C> C getSetter(F getter, Class<? super C> lambdaType) {
LambdaExecutableexecutable= LambdaHelper.resolve(getter);
Objectsetter= getSetter(executable.getClazz(), BeanHelper.getPropertyName(executable.getName()), lambdaType);
return SerFunc.<Object, C>cast().apply(setter);
}

此处使用方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@Test
voidtestGetSetter() {
  SerBiCons<LambdaExecutable, String> nameSetter = LambdaHelper.getSetter(LambdaExecutable.class, "name");
LambdaExecutableexecutable=newLambdaExecutable();
  nameSetter.accept(executable, "kubernetes");
  Assertions.assertEquals("kubernetes", executable.getName());
vallambda= LambdaHelper.getSetter(LambdaExecutable.class, "clazz", BiConsumer.class);
  BiConsumer<LambdaExecutable, Class<?>> clazzSetter = SerFunc.<BiConsumer<?, ?>, BiConsumer<LambdaExecutable, Class<?>>>cast().apply(lambda);
  clazzSetter.accept(executable, String.class);
  Assertions.assertEquals(String.class, executable.getClazz());
  clazzSetter = LambdaHelper.getSetter(LambdaExecutable::getClazz);
  clazzSetter.accept(executable, Object.class);
  Assertions.assertEquals(Object.class, executable.getClazz());
  SerBiCons<LambdaExecutable, String> nameSerSetter = LambdaHelper
          .<SerFunc<LambdaExecutable, String>, SerBiCons<LambdaExecutable, String>>
                  getSetter(LambdaExecutable::getName, SerBiCons.class);
  nameSerSetter.accept(executable, "serializable");
  Assertions.assertEquals("serializable", executable.getName());
}
相关文章
|
JavaScript 前端开发
Vue的getter和setter方法是干什么的?底层原理是什么?
Vue的getter和setter方法是干什么的?底层原理是什么?
649 0
|
3月前
构造函数注入和 Setter 依赖注入
【8月更文挑战第22天】
33 0
|
6月前
|
JavaScript API
Vue之数据代理(getter、setter)
Vue之数据代理(getter、setter)
|
Java 数据库 容器
@Inject 标记在setter方法上的作用
@Inject 标记在setter方法上的作用
|
开发者
|
前端开发
前端学习案例16-setter和getter的应用
前端学习案例16-setter和getter的应用
50 0
前端学习案例16-setter和getter的应用
|
JavaScript
Vue——02-03计算属性:computed的getter/setter
计算属性:computed的getter/setter
132 0
|
JSON 数据格式 网络架构
一个Getter引发的"血案"
一个Getter引发的"血案"
207 0
一个Getter引发的"血案"
|
Java
【Groovy】Groovy 方法调用 ( Java 类成员及 setter 和 getter 方法设置 | Groovy 类自动生成成员的 getter 和 setter 方法 )
【Groovy】Groovy 方法调用 ( Java 类成员及 setter 和 getter 方法设置 | Groovy 类自动生成成员的 getter 和 setter 方法 )
556 0
【Groovy】Groovy 方法调用 ( Java 类成员及 setter 和 getter 方法设置 | Groovy 类自动生成成员的 getter 和 setter 方法 )
|
Swift
懒加载和getter,setter
懒加载和getter,setter
198 0