前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >通过getter获取setter函数

通过getter获取setter函数

作者头像
阿超
发布2023-06-23 11:04:03
1010
发布2023-06-23 11:04:03
举报
文章被收录于专栏:快乐阿超快乐阿超

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

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

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

代码语言:javascript
复制
/**
 * 通过getter获取setter
 *
 * @param getter getter对应的lambda
 * @param <T>    getter参数类型
 * @param <R>    property类型
 * @return 返回setter对应的lambda
 */
public static <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
 */
public static <F extends Serializable, C> C getSetter(F getter, Class<? super C> lambdaType) {
  LambdaExecutable executable = LambdaHelper.resolve(getter);
  Object setter = getSetter(executable.getClazz(), BeanHelper.getPropertyName(executable.getName()), lambdaType);
  return SerFunc.<Object, C>cast().apply(setter);
}

此处使用方式:

代码语言:javascript
复制
@Test
void testGetSetter() {
  SerBiCons<LambdaExecutable, String> nameSetter = LambdaHelper.getSetter(LambdaExecutable.class, "name");
  LambdaExecutable executable = new LambdaExecutable();
  nameSetter.accept(executable, "kubernetes");
  Assertions.assertEquals("kubernetes", executable.getName());
  val lambda = 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());
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-04-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档