雜亂代碼

雜亂代碼,常用:

1.獲取當前實現類的泛型類

Type[] types = this.getClass().getInterfaces()[0].getGenericInterfaces();
  for(Type type1 : types){
      if(type1.getTypeName().indexOf(GeneralVouchersManager.class.getName()) != -1){
          Class<?> clazz = (Class<?>)((ParameterizedType) type1).getActualTypeArguments()[0];
      }
}

2.斷言
舉例 比如在接口中:

default boolean havePreVouchers(T query) throws Exception{
        return getCompareResult(query,(a,b) -> a > b);
    }
default boolean haveNextVouchers(T query) throws Exception{
        return getCompareResult(query,(a,b) -> a < b);
    }

區別只是判斷方式不同 所以提取出來公共部分 判斷方式以斷言形式傳入

default boolean getCompareResult(T query,BiPredicate<Integer,Integer> biPredicate) throws Exception {
        T result = this.getGeneralVouchersBO(query);
        if(result == null){
            return false;
        }
        Field[] fields = result.getClass().getDeclaredFields();
        for(Field f : fields){
            Type genericType = f.getGenericType();
            if (List.class.isAssignableFrom(f.getType()) && genericType instanceof ParameterizedType) {
                ParameterizedType pt = (ParameterizedType) genericType;
                Class<?> accountPrincipalApproveClazz = (Class<?>) pt.getActualTypeArguments()[0];
                if(AbstractVouchersBO.class.isAssignableFrom(accountPrincipalApproveClazz)){
                    PropertyDescriptor pde = new PropertyDescriptor(f.getName(), result.getClass());
                    Method rme = pde.getReadMethod();
                    List<?> list = (List<?>) rme.invoke(result);
                    if(ListUtils.isNotEmpty(list)){
                        String prefix = classMap.get(accountPrincipalApproveClazz.getSimpleName());
                        if(biPredicate.test(StringUtils.getCharacterTimes(this.getPrefix(),DELIMITER),StringUtils.getCharacterTimes(prefix,DELIMITER))){
                            return true;
                        }
                    }
                }
            }
        }
        return false;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章