`
Longmanfei
  • 浏览: 48113 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

泛型的"另类"应用

J# 
阅读更多

 

  • 泛形的基本术语,以ArrayList<E>为例:<>念着typeof
  1. ArrayList<E>中的E称为类型参数变量
  2. ArrayList<Integer>中的Integer称为实际类型参数
  3. 整个称为ArrayList<E>泛型类型
  4. 整个ArrayList<Integer>称为参数化的类型ParameterizedType 
  • 以上是常规泛型的应用,下面我们简单介绍自定义泛型应用
  1. Java程序中的普通方法、构造方法和静态方法中都可以使用泛型。方法使用泛形前,必须对泛形进行声明,语法:<T> ,T可以是任意字母,但通常必须要大写。<T>通常需放在方法的返回值声明之前。例如:

           public static <T> void doxx(T t);

 

           public class Test<T>{}

 

  1. 我们还可以直接再类上加上泛型的使用,但是需要注意的是即使我们再累上加上泛型,在静态方法上也要加上泛型其它方法可不加。
  2. 还要注意泛型<T>是引用数据类型(也就是说八种基本类型除外 byte  short  int   long   float  double  char 

            boolean )

 

  • 下面简单实现以下数组的交换和倒序,和换值
/** 实现一个简单的数组位置的交换 */
	public static <T> void test1(T arr[], int i, int j) {
		T temp = arr[i];
		arr[i] = arr[j];
		arr[j] = temp;
	}

    /* 实现数组的倒序 */

	public static <T> void test2(T arr[]) {
		int startindex = 0;
		int endindex = arr.length - 1;

		for (;;) {

			if (startindex >= endindex) {
				break;
			}

			T temp = arr[startindex];
			arr[startindex] = arr[endindex];
			arr[endindex] = temp;

			startindex++;
			endindex--;

		}

	}

    那么我们在main方法中应该怎么调用呢,特别注意必须是应用数据类型

public static void main(String[] args) {
		Integer arr[] = { 1, 2, 3, 4 };
		// test1(arr,0,2);? 怎么使用呢?引用数据类型
		
		test2(arr);

		for (int ar : arr) {
			System.out.print("[" + ar + "," + "]");
		}

	}

    只定义两个变量换值

public static void testChange() {
		int i = 10;
		int j = 111;

		// i=11 j=10;

		/*
		 * i=i+j; j=i-j; i=i-j;
		 * 
		 * System.out.println(i+"  "+j);
		 */

		/*
		 * 1001 i 1100 j ------- 0101 i 1100 j ----- 1001 j 0101 i 1100 i
		 * 
		 * 
		 * 
		 * 0101 i 1001 i ------- 1100 j
		 */
		i = i ^ j; // i
		j = i ^ j; // j

		i = i ^ j;

		System.out.println(i + "  " + j);

	}
 

 

 

分享到:
评论
8 楼 moqinan 2011-03-08  
受教啊!其实大家么必要那么深究。。。
7 楼 Longmanfei 2011-03-02  
bingoohuang 写道
又是“标题党”

首先另类我加了引号希望不要误解,其次大概是层次级别比较高,所以觉得贴比较菜 哈哈
6 楼 bingoohuang 2011-03-02  
又是“标题党”
5 楼 songlixiao 2011-03-02  
没看出另类在哪呀?
4 楼 jefery_liang 2011-03-01  
泛型很不错啊,值得学习
3 楼 7454103 2011-03-01  
喜欢泛型!
很不错的帖子! (还可以再 深究下! 泛型参数 ,泛型方法,extend super ? 等! )
2 楼 Longmanfei 2011-03-01  
又学习了
1 楼 Unmi 2011-03-01  
java 的泛型还有更有意思的用法,比如声明这样的方法:
public static <T,U> T getByIdx(T[] a, U b){

调用时的代码为:
String name = ArrayAlg.<String, Date>getByIdx(names,new Date());

或者隐式的:
String name1 = ArrayAlg.getByIdx(names,"GameOver");

有时必须显式的指明参数类型

我原来也整理过三篇《步步理解 JAVA 泛型编程》系列,还有诸如 extends, ? 等形式:
1. http://unmi.cc/understand-java-generic-1
2. http://unmi.cc/understand-java-generic-2
3. http://unmi.cc/understand-java-generic-3

相关推荐

    c++编写的超级marry另类版

    4. **模板和泛型编程**:C++的模板可以用于创建泛型函数和容器,提高代码的复用性。例如,可以使用模板创建一个适用于任何数据类型的堆栈或队列。 5. **文件操作**:游戏可能需要保存和加载玩家进度、读取资源文件...

    C++应用编程200例

    3. **模板**:C++的模板功能强大,可以用于创建泛型代码,实现数据类型无关的编程。这包括函数模板和类模板,它们允许开发者编写一次代码,应用于多种数据类型。理解模板的特性和使用场景对于编写高效、灵活的代码至...

    JAVA 2应用编程150例

    《JAVA 2应用编程150例》是一个深入学习Java编程的资源集合,它涵盖了广泛的Java编程实践,旨在帮助开发者巩固基础,提升技能。这个压缩包包含了一系列精心设计的示例,每个示例都经过了在JDK环境下的严格调试,确保...

    Borland Delphi 2005 Architect Update 2

    Object Pascal是Delphi的基础,它是一种面向对象的Pascal方言,支持类、接口、泛型等现代编程特性。在Delphi 2005中,语言的增强和优化进一步提升了代码的可读性和可维护性。 4. **数据库支持** Delphi 2005 包含...

    《Java2核心技术卷II》配套源码

    源码中可能包含枚举类的定义及其在程序中的应用。 7. **异常处理**:Java的异常处理机制是通过`try-catch-finally`和`throw`关键字实现的。源码可能会展示如何正确处理预期和非预期的异常,以及如何自定义异常类。 ...

    java基本组件使用

    在Java世界中,这些基本组件主要包括JVM(Java虚拟机)、类库、API(应用程序接口)以及开发工具等。下面我们将详细探讨这些组件以及它们在实际开发中的应用。 1. JVM(Java Virtual Machine) JVM是Java平台的...

    《Java2核心技术卷I》配套源码

    通过研究这些源码,你可以加深对Java语言的理解,提升编程技能,并且能够将理论知识应用于实际项目中。对于初学者来说,这是一个很好的学习资源,而对于有经验的开发者,它也是复习和验证知识的好工具。

    微软.NET程序员高级培训教程资料(卓高职业学校收集)

    3. **泛型**:允许创建可重用的数据结构和算法,同时保持类型安全。 4. **Lambda表达式和LINQ**:引入了Lambda表达式,简化了函数式编程,配合LINQ(Language Integrated Query)提供了优雅的查询数据方式。 5. **...

    C/C++程序设计导论(第二版)》程序源文件

    此外,C++还引入了模板,用于创建泛型代码,可以应用于各种数据类型,提高代码的通用性。STL(Standard Template Library,标准模板库)是C++的一个重要组成部分,包含容器(如vector、list、map等)、迭代器、算法...

    《精通JAVA核心技术》 源代码

    源代码将包含这两个特性在实际项目中的应用。 10. **Java虚拟机(JVM)**:源代码可能还涉及JVM的工作原理,如内存管理(堆、栈、方法区等)和垃圾回收,以及如何优化JVM配置以提高程序性能。 通过研究这些源代码,...

    《JAVA程序设计教程》源代码

    11. **泛型**:增强了代码的类型安全性和重用性,源代码中可能包含泛型类和泛型方法。 12. ** Swing和JavaFX**:是Java提供的图形用户界面(GUI)开发库,可以创建桌面应用。 通过分析这些源代码,不仅可以加深对...

    Template class to manipulate bits of undefined type一个操作

    在C++中,模板是一种强大的工具,可以创建泛型代码,这意味着模板类或函数可以处理多种不同的数据类型。这种模板类可能包含一系列成员函数,如`set_bit`、`clear_bit`、`test_bit`和`flip_bit`等,它们针对位字段...

    Visual Basic.NET实例教程

    此外,VB.NET还支持泛型,这使得创建可复用的类型安全的数据结构成为可能。 Windows Forms是VB.NET进行桌面应用程序开发的主要工具,提供了丰富的控件库,如按钮、文本框、列表视图等,用于构建用户界面。通过实例...

    VC++实用程序100例

    9. **模板和STL**:标准模板库(STL)包括容器(如vector、list、set)、迭代器、算法等,使用模板可以实现泛型编程。实例将展示如何有效地利用这些工具。 10. **性能优化**:部分实例可能涉及内存管理、多线程并行...

    大公司JAVA面试试题

    - 掌握泛型的概念,了解其边界、类型擦除和通配符的使用。 - 知道如何遍历集合,理解迭代器和增强for循环的区别。 4. **并发编程**: - 熟悉线程的创建方式(实现Runnable接口、继承Thread类)及线程间的通信...

    zoo video processing toolkit-开源

    - **模板和泛型编程**:C++的模板可以实现泛型编程,使得代码能适应不同数据类型,增强代码的复用性。 3. **开源优势** - **社区驱动**:开源项目由全球开发者共同维护和改进,意味着zoo工具包会不断吸收新的功能...

    VC.NET转换成VC6.0的程序源码

    3. **修改语法**:将C#或VB.NET的语法转换为C++,例如,去除属性(Properties)、事件(Events)和泛型(Generics)等。 4. **重构项目结构**:按照VC6.0的项目模板重新组织源码和资源文件,创建新的解决方案...

    [数据抽象和问题求解-C++语言描述]源代码

    在“数据抽象和问题求解-C++语言描述4e_源代码”这个压缩包中,可能包含了各种示例代码,涵盖了上述概念的应用。学习者可以通过阅读和运行这些代码,了解如何在实际问题中运用数据抽象和问题求解的思想。同时,这也...

    Java2核心技术卷一 配套源码

    这本书的配套源码提供了书中所讲解的各种示例和练习的实现,可以帮助读者更深入地理解和应用Java编程知识。这里我们将围绕这些知识点进行详细的阐述。 首先,Java语言作为一门面向对象的编程语言,其核心概念包括类...

Global site tag (gtag.js) - Google Analytics