`
wuxing429
  • 浏览: 16119 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

classUtils.forName 说梯归

 
阅读更多

今天在看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;
	}

 

分享到:
评论

相关推荐

    cuon-matrix.js+cuon-utils.js+webgl-debug.js+webgl-utils.js

    webgl相关 cuon-matrix.js+cuon-utils.js+webgl-debug.js+webgl-utils.js

    json-utils.py

    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_...

    ImportError:无法从“django.utils.encoding”导入名称“force text”Python 错误

    在Python和Django框架的开发过程中,可能会遇到各种错误,其中"ImportError:无法从'django.utils.encoding'导入名称'force text'"是一个常见的问题。这个错误意味着你的代码尝试从'django.utils.encoding'模块导入...

    vue-cli脚手架build目录下utils.js工具配置文件详解

    此文章用来解释vue-cli脚手架build目录中的utils.js配置文件 1.此配置文件是vue开发环境的wepack相关配置文件,主要用来处理css-loader和vue-style-loader 2.关于注释 •当涉及到较复杂的解释我将通过标识的方式...

    axis2.jar 解决 org.apache.axis2.util.JavaUtils.callStackToString问题

    &lt;Call Stack = DEBUG_FRAME = org.apache.axis2.util.JavaUtils.callStackToString(JavaUtils.java:564) DEBUG_FRAME = org.apache.axis2.description.ParameterIncludeImpl.debugParameterAdd(ParameterIncludeImpl...

    json-utils.cpython-37.pyc

    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)

    这里提到的"cuon-matrix.js"、"cuon-utils.js"、"webgl-debug.js"和"webgl-utils.js"就是这样的工具库,它们为WebGL开发提供了便利。 1. cuon-matrix.js: 这个库专注于矩阵操作,这是计算机图形学中的核心概念。...

    axis2解决 org.apache.axis2.util.JavaUtils.callStackToString问题

    总的来说,解决`org.apache.axis2.util.JavaUtils.callStackToString`问题需要对Axis2的架构和工作原理有一定理解,同时具备良好的问题排查和调试技巧。通过逐步分析和尝试,大多数问题都能得到解决。

    sourceInsight4.0的配置文件utils.em

    sourceInsight4.0.85版本的自定义命令,该配置文件替换后课可以使用InsertFileHeader,InsertHeader,InsertFunctionHeader对函数,以及创建的文件进行注释。提高开发项目的速度

    nfs-utils.tar.gz

    【nfs-utils.tar.gz】是一个包含NFS(Network File System)工具的离线安装包,主要服务于Linux系统,用于实现不同计算机之间的文件共享。NFS是一种标准的协议,允许一台计算机(客户端)透明地访问另一台计算机...

    utils-gg_utils.h

    utils-gg_utils.h

    uni-app 自己封装的utils.js

    uni-app 自己封装的utils.js 常用工具类(封装的ajax,上传,查看文档,富文本解析)

    utils.em Source Insight 原版文件

    utils.em Source Insight 原版文件,简单应用,不小心被删除可以使用此代码,如果sourceinsight不能使用可以参考此文件

    utils.properties修改、读取工具类

    Java读取、修改utils.properties工具类,可直接拿去用。

    yarn-utils.py

    计算yarn内存配置的python脚本yarn-util.py,此脚本有四个参数 参数 描述 -c CORES 每个节点CPU核数 -m MEMORY 每个节点内存总数(单位G) -d DISKS 每个节点的硬盘个数 -k HBASE 如果安装了Hbase则为True,否则为...

    MD5Utils.java

    MD5 是message-digest algorithm 5 (信息-摘要算法)缩写,广泛用于加密和解密技术,常用于文件校验。校验?MD5是用于对信息生成信息摘要(即散列码)的算法之一。不管文件多大,经过MD5后都能生成唯一的MD5值。...

    planar_utils.py和testCases_cv2.py

    吴恩达深度学习作业用到的planar_utils.py和testCases_cv2.py

    utils.dll

    utils.dll

    吴恩达课程所需lr_utils.py文件以及dataset数据集

    这个压缩包文件包含了他在教学中使用的`lr_utils.py`脚本和相关的`dataset`数据集,这些都是进行深度学习实践的重要资源。 `lr_utils.py`是吴恩达课程中用于管理学习率(learning rate)和训练过程的辅助工具。学习...

Global site tag (gtag.js) - Google Analytics