`
leeon
  • 浏览: 43005 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

范型是这样的-3

    博客分类:
  • java
阅读更多
最后贴一段代码,某高人写的,卡卡

import java.io.IOException;
import java.io.Serializable;
import java.io.Writer;
import java.lang.reflect.GenericArrayType;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.lang.reflect.TypeVariable;
import java.lang.reflect.WildcardType;
import java.util.ArrayList;
import java.util.List;

/*******************************************************************************
 * 
 * 
 * @作者:XXX
 * @日期:2007-3-11
 * @版权:北京易迈普技术有限公司版权所有
 ******************************************************************************/
public class GenericsTypeScanner {
	private Writer writer;

	public GenericsTypeScanner() {

	}

	/**
	 * scan a generic class,output the originate declaration to the destination
	 * writer。
	 * 
	 * @param writer
	 * @param clazz
	 */
	public void 扫描(Writer writer, Class clazz) {
		this.writer = writer;
		try {
			printClass(clazz);

			for (Method method : clazz.getDeclaredMethods())
				printMethod(method);
		} catch (IOException e) {
			e.printStackTrace(System.out);

		}

	}

	private void printClass(Class clazz) throws IOException {
		writer.write(clazz.getName());
		printTypes(clazz.getTypeParameters(), "</span><span>",
				"</span><span class=\"string\">",
				"</span><span>, </span><span class=\"string\">");

		// scan the super class
		Type superClazz = clazz.getGenericSuperclass();
		if (superClazz != null) {
			writer.write(" extends ");
			printType(superClazz);
		}

		// scan the interfaces
		printTypes(clazz.getGenericInterfaces(), " implements ", ",", "");

		writer.write("\n");
	}

	private void printMethod(Method method) throws IOException {
		String name = method.getName();
		writer.write(Modifier.toString(method.getModifiers()));
		writer.write(" ");
		printTypes(method.getTypeParameters(), "</span><span>",
				"</span><span class=\"string\">",
				"</span><span>, </span><span class=\"string\">");

		printType(method.getGenericReturnType());

		writer.write(" ");
		writer.write(name);
		writer.write("(");
		printTypes(method.getGenericParameterTypes(), "", ", ", "");
		writer.write(")\n");

	}

	private void printTypes(Type[] types, String prefix, String seperator,
			String suffix) throws IOException {
		if (types.length > 0)
			writer.write(prefix);
		for (int i = 0; i < types.length; i++) {
			if (i > 0)
				writer.write(seperator);
			printType(types[i]);
		}
		if (types.length > 0)
			writer.write(suffix);
	}

	private void printType(Type type) throws IOException {
		if (type instanceof Class) {
			Class t = (Class) type;
			writer.write(t.getName());
		} else if (type instanceof TypeVariable) {
			TypeVariable t = (TypeVariable) type;
			writer.write(t.getName());
			printTypes(t.getBounds(), " extends ", ",", "");
		} else if (type instanceof WildcardType) {
			WildcardType t = (WildcardType) type;
			writer.write("?");
			printTypes(t.getLowerBounds(), " extends ", " & ", "");
			printTypes(t.getUpperBounds(), " super ", " & ", "");
		} else if (type instanceof ParameterizedType) {
			ParameterizedType t = (ParameterizedType) type;
			Type owner = t.getOwnerType();
			if (owner != null) {
				printType(owner);
				writer.write(".");
			}
			printType(t.getRawType());
			printTypes(t.getActualTypeArguments(), "</span><span>",
					"</span><span class=\"string\">",
					"</span><span>, </span><span class=\"string\">");
		} else if (type instanceof GenericArrayType) {
			GenericArrayType t = (GenericArrayType) type;
			printType(t.getGenericComponentType());
			writer.write("[]");
		}
	}
}

分享到:
评论

相关推荐

    《分布式系统原理与范型--(第二版)》复习资料

    ### 分布式系统原理与范型...以上是对《分布式系统原理与范型--(第二版)》中第一章和第二章内容的知识点总结。通过这些内容的学习,可以更好地理解分布式系统的组成、原理及其关键特性,为后续深入研究打下坚实的基础。

    一个很好的范型立例题

    3. 范型的擦除 - Java范型在编译后会进行类型擦除,实际运行时并不保留类型参数信息,因此在运行时无法通过反射获取泛型类型。 - 擦除后,泛型类的实例将退化为无参数类型,但编译器会检查类型安全。 4. 泛型与...

    论文研究-消息传递范型与C/S范型双范型的主数据管理机制 .pdf

    本文提出的基于消息传递范型和客户机/服务器(Client/Server,简称C/S)范型双范型的主数据管理机制,能够有效解决MDM面临的问题。 消息传递范型是计算机科学中的一个基本概念,用于描述进程间通信的方式。在这范型...

    分布式系统原理与范型_考试_2009_答案

    华中科技大学 分布式系统原理与范型_考试_2009_答案

    C++多范型设计

    《C++多范型设计》是一本深入探讨C++编程语言中模板技术的专著,由知名软件工程师James O. Coplien撰写,并由鄢爱兰、周辉等翻译成中文版,ISBN号为9787508318240。这本书的核心主题是C++中的泛型编程,它是C++编程...

    七周七语言_理解多种编程范型-[PDF]

    《七周七语言:理解多种编程范型》共介绍了七种不同的编程语言。对于每种语言,分别介绍了各自的特性、应用,以及编程入门知识和关键编程范型,还带领读者使用能够代表该语言最重要特性的技术,解决某个不寻常的问题...

    分布式系统-原理与范型(第2版)

    分布式系统-原理与范型(第2版) 分布式系统-原理与范型(第2版) 分布式系统-原理与范型(第2版) 分布式系统-原理与范型(第2版)

    范型程序设计与 STL.pdf

    《范型程序设计与 STL》是一本深入探讨C++编程中的关键概念和技术的书籍,主要聚焦于范型(Generic Programming)和标准模板库(Standard Template Library,简称STL)。范型编程是一种强大的软件开发方法,它允许...

    分布式系统-原理与范型(第2版) 完整版

    第2~9章讨论的是分布式系统的的原理、概念和技术,包括通信、进程、命名、同步化、一致性和复制、容错性以及安全性等,而分布式应用的开发方法(即范型)在第10~13章中进行了讨论。但是,与前一版不同的是,我们...

    DecalSDL-Delphi的范型类库-通用数据结构与算法类库(一).pdf

    3. **数组常量功能**:利用 Delphi 4 引入的 `array of const`,简化程序员的工作,提高了代码的可读性和可维护性。 4. **丰富的算法集**:提供了超过60种常见的计算机算法,涵盖了排序、搜索、统计等多个领域。 5. ...

    分布式系统原理与范型(第二版)

    3. 微服务架构:将大型应用程序分解为一组小型、独立的服务,每个服务都可以独立部署和扩展,增强了系统的灵活性和可维护性。 4. MapReduce:一种用于大规模数据处理的计算模型,由Google提出,主要应用于大数据...

    分布式系统原理与范型-naming

    分布式系统原理与范型中的命名系统是构建大规模网络服务的核心组成部分。命名系统允许在分布式环境中对资源进行标识、定位和访问。在这个系统中,"命名"是指为系统内的实体分配一个标识符,使得这些实体可以被其他...

    《分布式系统原理与范型》.pdf

    这样的结构既保证了对基础理论的充分覆盖,也兼顾了对实际应用的深入分析。 为适应中国高等教育对课程内容改革和教材更新的需求,清华大学出版社经由培生教育出版集团授权,影印出版了此书的中文版。这一举措旨在...

    分布式系统原理与范型课件

    3. **分布式系统范型**: - **主从结构**:一个中心节点(主节点)负责协调和管理其他节点(从节点)。 - **对等网络(P2P)**:所有节点地位平等,可以既是服务提供者也是服务消费者。 - **集群**:多台服务器...

    分布式系统原理与范型

    《分布式系统原理与范型》是分布式系统中的经典教材,全书分为两部分:原理和范型。第一部分详细讨论了分布式系统的原理、概念和技术,其中包括通信、进程、命名、同步、一致性和复制、容错以及安全。第二部分给出了...

    论文研究-软件范型的演绎与智能体 .pdf

    在分析信息化进程中的软件范型演绎与智能体,我们首先需要了解软件范型这一概念。软件范型,指的是软件开发中采用的抽象模型和方法论,它反映了软件开发的一种哲学思考和理念。随着信息化进程中面临的主要问题的变化...

    Java 范型Java 范型.doc

    Java 范型Java 范型

    分布式系统原理与范型 V2 (2008)

    3. **分布式设计原则**: - **松耦合**:各组件间通信简单,减少依赖性。 - **模块化**:将系统分解为可独立开发和测试的模块。 - **自治性**:节点应具有一定的自主决策能力。 - **服务化**:采用微服务架构,...

    分布式系统原理与范型答案(第二版)答案

    3. **Paxos算法**:Paxos是一种用于在分布式环境中达成一致性的算法,常用于构建高可用性和容错性的服务。学习Paxos能帮助理解如何解决分布式一致性问题。 4. **分布式一致性模型**:包括强一致性、最终一致性、...

Global site tag (gtag.js) - Google Analytics