【对线面试官】今天来聊聊Java泛型

Java3y

共 1810字,需浏览 4分钟

 ·

2020-12-26 07:26

public interface JpaRepository<TIDextends PagingAndSortingRepository<TID>, QueryByExampleExecutor<T{

 List findAll();

 List findAll(Sort sort);

 List findAllById(Iterable ids);

  List saveAll(Iterable entities);

 void flush();

  saveAndFlush(S entity);

 void deleteInBatch(Iterable entities);

 void deleteAllInBatch();

 getOne(ID id);

 @Override
  List findAll(Example example);

 @Override
  List findAll(Example example, Sort sort);
}
// 传入 需要group by 和 sum 的字段名
public cacheMap(List groupByKeys, List sumValues) {
  this.groupByKeys = groupByKeys;
  this.sumValues = sumValues;
}

private void excute(T e) {
  
  // 从pojo 取出需要group by 的字段 list
  List key = buildPrimaryKey(e);
  
  // primaryMap 是存储结果的Map
  T value = primaryMap.get(key);
  
  // 如果从存储结果找到有相应记录
  if (value != null) {
    for (String elem : sumValues) {
      // 反射获取对应的字段,做累加处理
      Field field = getDeclaredField(elem, e);
      if (field.get(e) instanceof Integer) {
        field.set(value, (Integer) field.get(e) + (Integer) field.get(value));
      } else if (field.get(e) instanceof Long) {
        field.set(value, (Long) field.get(e) + (Long) field.get(value));
      } else {
        throw new RuntimeException("类型异常,请处理异常");
      }
    }
    
    // 处理时间记录
    Field field = getDeclaredField("updated", value);
    if (null != field) {
      field.set(value, DateTimeUtils.getCurrentTime());
    }
  } else {
    // group by 字段 第一次进来
    try {
      primaryMap.put(key, Tclone(e));
      createdMap.put(key, DateTimeUtils.getCurrentTime());
    }catch (Exception ex) {
      log.info("first put value error {}" , e);
    }
  }
}

文章以纯面试的角度去讲解,所以有很多的细节是未铺垫的。

比如说反射和泛型基础,这些在【Java3y】都有过详细的基本教程甚至电子书,我就不再详述了。回复「888」即可获取


欢迎关注我的微信公众号【面试造火箭】来聊聊Java面试

添加我的微信sanwaiyihao进一步交流和学习


浏览 7
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报