今天進考考你Java泛型基礎吧...





public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {
List<T> findAll();
List<T> findAll(Sort sort);
List<T> findAllById(Iterable<ID> ids);
<S extends T> List<S> saveAll(Iterable<S> entities);
void flush();
<S extends T> S saveAndFlush(S entity);
void deleteInBatch(Iterable<T> entities);
void deleteAllInBatch();
T getOne(ID id);
@Override
<S extends T> List<S> findAll(Example<S> example);
@Override
<S extends T> List<S> findAll(Example<S> example, Sort sort);
}


// 傳入 需要group by 和 sum 的欄位名
public cacheMap(List<String> groupByKeys, List<String> sumValues) {
this.groupByKeys = groupByKeys;
this.sumValues = sumValues;
}
private void excute(T e) {
// 從pojo 取出需要group by 的欄位 list
List<Object> 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】都有過詳細的基本教程甚至電子書,我就不再詳述了,
歡迎關注我的微信公眾號【面試造火箭】來聊聊Java面試

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/241704.html
標籤:Java
