1. 程式人生 > 實用技巧 >【對線面試官】 Java 泛型

【對線面試官】 Java 泛型

今天進考考你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面試