今天在看spring代码的时候看到classutils中的梯归的的方法,也来回顾下梯归算法,我们在代码中经常用到:递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。
像最简单的求阶梯,最简单的梯归
int multiply(int n){ if(n==1||n==0) return n; else return n*multiply(n-1); }
但是也有另外一种做标记的梯归:
public static Class forName(String name, ClassLoader classLoader) throws ClassNotFoundException, LinkageError { Assert.notNull(name, "Name must not be null"); Class clazz = resolvePrimitiveClassName(name); if (clazz != null) { return clazz; } // "java.lang.String[]" style arrays if (name.endsWith(ARRAY_SUFFIX)) { String elementClassName = name.substring(0, name.length() - ARRAY_SUFFIX.length()); Class elementClass = forName(elementClassName, classLoader); return Array.newInstance(elementClass, 0).getClass(); } // "[Ljava.lang.String;" style arrays int internalArrayMarker = name.indexOf(INTERNAL_ARRAY_PREFIX); if (internalArrayMarker != -1 && name.endsWith(";")) { String elementClassName = null; if (internalArrayMarker == 0) { elementClassName = name.substring(INTERNAL_ARRAY_PREFIX.length(), name.length() - 1); } else if (name.startsWith("[")) { elementClassName = name.substring(1); } Class elementClass = forName(elementClassName, classLoader); return Array.newInstance(elementClass, 0).getClass(); } ClassLoader classLoaderToUse = classLoader; if (classLoaderToUse == null) { classLoaderToUse = getDefaultClassLoader(); } return classLoaderToUse.loadClass(name); }
比如得到类中的方法数,采用梯归就升了很多代码
public static int getMethodCountForName(Class clazz, String methodName) { Assert.notNull(clazz, "Class must not be null"); Assert.notNull(methodName, "Method name must not be null"); int count = 0; Method[] declaredMethods = clazz.getDeclaredMethods(); for (int i = 0; i < declaredMethods.length; i++) { Method method = declaredMethods[i]; if (methodName.equals(method.getName())) { count++; } } Class[] ifcs = clazz.getInterfaces(); for (int i = 0; i < ifcs.length; i++) { count += getMethodCountForName(ifcs[i], methodName); } if (clazz.getSuperclass() != null) { count += getMethodCountForName(clazz.getSuperclass(), methodName); } return count; }
相关推荐
json_utils.pyjson_utils.pyjson_utils.pyjson_utils.pyjson_utils.pyjson_utils.pyjson_utils.pyjson_utils.pyjson_utils.pyjson_utils.pyjson_utils.pyjson_utils.pyjson_utils.pyjson_utils.pyjson_utils.pyjson_...
axis2解决 org.apache.axis2.util.JavaUtils.callStackToString问题
cuon-matrix.js,cuon-utils.js,webgl-debug.js,webgl-utils.js
此文章用来解释vue-cli脚手架build目录中的utils.js配置文件 1.此配置文件是vue开发环境的wepack相关配置文件,主要用来处理css-loader和vue-style-loader 2.关于注释 •当涉及到较复杂的解释我将通过标识的方式...
json_utils.cpython-37.json_utils.cpython-37.pycjson_utils.cpython-37.pycjson_utils.cpython-37.pycjson_utils.cpython-37.pycjson_utils.cpython-37.pycjson_utils.cpython-37.pycjson_utils.cpython-37....
webgl相关 cuon-matrix.js+cuon-utils.js+webgl-debug.js+webgl-utils.js
<Call Stack = DEBUG_FRAME = org.apache.axis2.util.JavaUtils.callStackToString(JavaUtils.java:564) DEBUG_FRAME = org.apache.axis2.description.ParameterIncludeImpl.debugParameterAdd(ParameterIncludeImpl...
common_utils.zip,Flutter 常用工具类库,包含日期、屏幕、正则、对象、数字、Widget.
utils-gg_utils.h
ws-utils.jarws-utils.jar
uni-app 自己封装的utils.js 常用工具类(封装的ajax,上传,查看文档,富文本解析)
utils.em Source Insight 原版文件,简单应用,不小心被删除可以使用此代码,如果sourceinsight不能使用可以参考此文件
Java读取、修改utils.properties工具类,可直接拿去用。
计算yarn内存配置的python脚本yarn-util.py,此脚本有四个参数 参数 描述 -c CORES 每个节点CPU核数 -m MEMORY 每个节点内存总数(单位G) -d DISKS 每个节点的硬盘个数 -k HBASE 如果安装了Hbase则为True,否则为...
MD5 是message-digest algorithm 5 (信息-摘要算法)缩写,广泛用于加密和解密技术,常用于文件校验。校验?MD5是用于对信息生成信息摘要(即散列码)的算法之一。不管文件多大,经过MD5后都能生成唯一的MD5值。...
吴恩达深度学习作业用到的planar_utils.py和testCases_cv2.py
utils.dll
Source Insight 配置宏文件,支持汉字文件头注释和函数注释,支持汉字左右键一次删除。
立面包含三个文件sapnco.dll、sapnco_utils.dll、rscp4n.dll,适用于32位环境下的开发。测试成功。有兴趣的可以下载 大家可以互相沟通交流。
extras-refs_tags_android-4.1.1_r1-ext4_utils.tar.gz