【對線面試官】 Java 泛型
阿新 • • 發佈:2020-12-28
今天進考考你Java泛型基礎吧...
publicinterfaceJpaRepository<T,ID>extendsPagingAndSortingRepository<T,ID>,QueryByExampleExecutor<T>{
List<T>findAll();
List<T>findAll(Sortsort);
List<T>findAllById(Iterable<ID>ids);
<SextendsT>List<S>saveAll(Iterable<S>entities) ;
voidflush();
<SextendsT>SsaveAndFlush(Sentity);
voiddeleteInBatch(Iterable<T>entities);
voiddeleteAllInBatch();
TgetOne(IDid);
@Override
<SextendsT>List<S>findAll(Example<S>example);
@Override
<SextendsT>List<S>findAll(Example<S>example,Sortsort);
}
//傳入需要groupby和sum的欄位名
publiccacheMap(List<String>groupByKeys,List<String>sumValues){
this.groupByKeys=groupByKeys;
this.sumValues=sumValues;
}
privatevoidexcute(Te){
//從pojo取出需要groupby的欄位list
List<Object>key=buildPrimaryKey(e);
//primaryMap是儲存結果的Map
Tvalue=primaryMap.get(key);
//如果從儲存結果找到有相應記錄
if(value!=null){
for(Stringelem:sumValues){
//反射獲取對應的欄位,做累加處理
Fieldfield=getDeclaredField(elem,e);
if(field.get(e)instanceofInteger){
field.set(value,(Integer)field.get(e)+(Integer)field.get(value));
}elseif(field.get(e)instanceofLong){
field.set(value,(Long)field.get(e)+(Long)field.get(value));
}else{
thrownewRuntimeException("型別異常,請處理異常");
}
}
//處理時間記錄
Fieldfield=getDeclaredField("updated",value);
if(null!=field){
field.set(value,DateTimeUtils.getCurrentTime());
}
}else{
//groupby欄位第一次進來
try{
primaryMap.put(key,Tclone(e));
createdMap.put(key,DateTimeUtils.getCurrentTime());
}catch(Exceptionex){
log.info("firstputvalueerror{}",e);
}
}
}
文章以純面試的角度去講解,所以有很多的細節是未鋪墊的。
比如說反射和泛型基礎,這些在【Java3y】都有過詳細的基本教程甚至電子書,我就不再詳述了。
歡迎關注我的微信公眾號【面試造火箭】來聊聊Java面試