`

泛型学习的例子

    博客分类:
  • Java
SUN 
阅读更多

例一:
package genericType;

public class Pair<T> {
	
	// 构造器一
	public Pair() {
		this.min = null;
		this.max = null;
	}
	//构造器二
	public Pair(T _min,T _max){
		this.min = _min;
		this.max = _max;
	}
	
	//设置器、访问器
	public T getMin() {
		return min;
	}
	public void setMin(T min) {
		this.min = min;
	}
	public T getMax() {
		return max;
	}
	public void setMax(T max) {
		this.max = max;
	}

	// 私有域
	private T min;
	private T max;
}

 

package genericType;

public class ArrayAlg {
	
	//定义一个泛型方法,含有类型变量的限定,
	//只能被实现了Comparable接口的类的数组调用
	public static < T extends Comparable<? super T> > Pair<T> minmax(T[] a){
		
		if(a == null ||a.length == 0) return null;
		
		T min = a[0];
		T max = a[0];
		
		for (int i = 1; i < a.length; i++) {
			if(min.compareTo(a[i]) > 0) min = a[i];
			if(max.compareTo(a[i]) < 0) max = a[i];
		}
		
		return new Pair<T>(min,max);
	}
	
	//定义一个泛型方法
	public static <T> T getMiddle(T[] a){
		return a[a.length / 2];
	}
}

 

package genericType;

import java.util.Calendar;
import java.util.GregorianCalendar;

public class PairTest {
	public static void main(String[] args) {
		
		
		String[] words = {"Mary","had","a","little","lamb"}; 
		Pair<String> mm = ArrayAlg.minmax(words);
		System.out.println("Min = " + mm.getMin());
		System.out.println("Max = " + mm.getMax());
		
		
		Integer[] names = {1,2,3};
		Integer middle = ArrayAlg.getMiddle(names);
		System.out.println("Middle = " + middle);
		
		
		GregorianCalendar[] birthdays = {
			new GregorianCalendar(1906,Calendar.DECEMBER,9),
			new GregorianCalendar(1815,Calendar.DECEMBER,10),
			new GregorianCalendar(1903,Calendar.DECEMBER,3),
			new GregorianCalendar(1910,Calendar.JUNE,22),
		};
		Pair<GregorianCalendar> nn = ArrayAlg.minmax(birthdays); 
		System.out.println("Min = " + nn.getMin().getTime());
		System.out.println("Max = " + nn.getMax().getTime());
	}
}

 

结果:

Min = Mary

Max = little

Middle = 2

Min = Sun Dec 10 00:00:00 CST 1815

Max = Wed Jun 22 00:00:00 CST 1910

 

 

例二:

package genericType2;

import java.util.Date;
import java.util.GregorianCalendar;


public class Employee {
	
	// 构造器
	public Employee() {
		
	}	
	public Employee(String n,double s,int year,int month,int day) {
		this.name = n;
		this.salary = s;
		GregorianCalendar calendar = new GregorianCalendar(year,month-1,day);
		this.hireDay = calendar.getTime();
	}
	
	// 访问器 、 更改器
	public String getName() {
		return name;
	}
	public double getSalary() {
		return salary;
	}
	public Date getHireDay() {
		return hireDay;
	}
	
	// 工资计算
	public void raiseSalary(double byPercent){
		double raise = this.salary * byPercent / 100 ;
		this.salary = this.salary + raise ;
	}
	
	// 私有域
	private String name ;
	private double salary ;
	private Date hireDay ;
}

 

package genericType2;

public class Manager extends Employee {
	
	// 构造器
	public Manager(String n,double s,int year,int month,int day) {
		super(n,s,year,month,day);
		this.bonus = 0 ;
	}
	
	// 覆盖父类方法
	public double getSalary(){
		double baseSalary = super.getSalary();
		return baseSalary + bonus ;
	}
	
	//访问器  、 更改器
	public double getBonus() {
		return bonus;
	}

	public void setBonus(double bonus) {
		this.bonus = bonus;
	}
	
	// 私有域
	private double bonus ;	
}

 

package genericType2;

public class Pair<T> {
	
	// 构造器一
	public Pair() {
		this.min = null;
		this.max = null;
	}
	//构造器二
	public Pair(T _min,T _max){
		this.min = _min;
		this.max = _max;
	}
	
	//设置器、访问器
	public T getMin() {
		return min;
	}
	public void setMin(T min) {
		this.min = min;
	}
	public T getMax() {
		return max;
	}
	public void setMax(T max) {
		this.max = max;
	}

	// 私有域
	private T min;
	private T max;
}

 

package genericType2;

public class PairAlg {

	public static boolean hashNulls(Pair<?> p){
		return p.getMin() == null || p.getMax() == null;
	}
	
	//通配符捕获
	public static void swap(Pair<?> p){
		swapHelper(p);
	}
	// 辅助swap方法
	public static <T> void swapHelper(Pair<T> p) {
		T t = p.getMin();
		p.setMin(p.getMax());
		p.setMax(t);
	}
}

 

package genericType2;

public class PairTest2 {
	public static void main(String[] args) {
		
		Manager ceo = new Manager("张作强", 800000, 2008, 12, 15);
		Manager cfo = new Manager("陈惠仪", 600000, 2008, 12, 15);
		Pair<Manager> buddies = new Pair<Manager>(ceo,cfo);
		printBuddies(buddies);
		
		ceo.setBonus(1000000);
		cfo.setBonus(500000);
		Manager[] managers = {ceo , cfo};
		
		Pair<Employee> result = new Pair<Employee>();
		minMaxBonus(managers , result);
		System.out.println("Min : " + result.getMin().getName() + 
				" , Max : " + result.getMax().getName());
		
		System.out.println("-------- swap --------");
		
		maxMinBonus(managers,result);
		System.out.println("Min : " + result.getMin().getName() + 
				" , Max : " + result.getMax().getName());
	}

	// 通配符的超类型限定<? super Manager>
	private static void maxMinBonus(Manager[] a, Pair<? super Manager> result) {
		
		minMaxBonus(a, result);
		// OK -- swapHelper captures wildcard type
		PairAlg.swapHelper(result);
	}

	// 通配符的超类型限定<? super Manager>
	private static void minMaxBonus(Manager[] a, Pair<? super Manager> result) {
		
		if(a == null || a.length == 0)
			return;
		Manager min = a[0];
		Manager max = a[0];
		for (int i = 1; i < a.length; i++) {
			if(min.getBonus() > a[i].getBonus())
				min = a[i];
			if(max.getBonus() < a[i].getBonus())
				max = a[i];
		}
		result.setMin(min);
		result.setMax(max);
	}

	//通配符类型<? extends Employee>
	private static void printBuddies(Pair<? extends Employee> p) {
		Employee min = p.getMin();
		Employee max = p.getMax();
		System.out.println(min.getName() + " and " + max.getName() + " are buddies.");
	}
}

 

结果:

张作强 and 陈惠仪 are buddies.

Min : 陈惠仪 , Max : 张作强

-------- swap --------

Min : 张作强 , Max : 陈惠仪

 

 

分享到:
评论

相关推荐

    java 一个关于泛型的简单例子

    此外,文件名`Java.jpg`可能表示的是一个与这个泛型例子相关的图片,可能是一个截图或者示意图,用于帮助理解泛型的概念或者`MyFirstGeneric`类的结构和用法。在实际学习过程中,视觉辅助工具往往能够帮助我们更好地...

    java io流 xml 泛型 例子学习

    本文将深入探讨这三个主题,并通过具体的例子进行学习。 首先,我们来看Java IO流。IO流在Java中是用来处理输入输出操作的核心机制。它允许程序与外部设备(如硬盘、键盘、网络等)进行数据交换。Java IO流分为字节...

    java泛型例子

    Java泛型是Java编程语言中的一个关键特性,它在2004年随着JDK 5.0的发布被引入,极大地增强了类型安全性和代码可读性。...对于Java泛型的例子,可以通过运行和分析压缩包中的`generic`文件来加深理解和实践。

    泛型笔记学习2009

    以下是一个使用泛型的例子,展示了如何创建一个泛型类和泛型方法: ```java // 泛型类示例 public class Box&lt;T&gt; { private T t; public void set(T t) { this.t = t; } public T get() { return t; } } //...

    高级无敌,c#泛型例子

    在"高级无敌,c#泛型例子"这个主题中,我们将深入探讨C#泛型的基本概念、优势以及如何实际应用。 首先,泛型是C#中引入的一种类型参数化机制。在定义类或方法时,我们可以使用类型参数(如`T`)来代替具体的类型,...

    Java泛型学习1

    - **避免运行时错误**:使用泛型可以在编译时捕获原本在运行时才会出现的类型错误,例如`GenericComponent.java`的例子。 - **渲染类的抽象**:`ComponentRenderer`抽象类使用泛型表示渲染特定类型组件的逻辑,如`...

    C#泛型学习

    在这个例子中,`T` 是一个类型参数,表示栈可以处理的任何类型。在创建栈实例时,我们需要指定具体的类型,如 `Stack&lt;int&gt;` 或 `Stack&lt;string&gt;`。 #### 四、泛型类实例化的理论 C#泛型类在编译时并不会生成具体的...

    C#学习之路--泛型

    在“C#学习之路--泛型”这个主题中,我们将深入探讨泛型的基本概念、泛型的定义和类型参数、泛型类和泛型接口,以及泛型委托和泛型事件。 **泛型的基本概念** 泛型是C# 2.0引入的一个新特性,它的核心思想是推迟...

    C++f 泛型编程应用实例

    通过学习STL,你可以更好地理解泛型编程在实际开发中的应用。 “bookinfo.dat”可能是一个包含书籍信息的数据文件,这通常涉及到数据结构和文件I/O操作。在C++中,泛型编程可以帮助我们编写出处理不同类型数据的...

    泛型第一个例子

    通过`Fanxing.java`和`A.java`这两个文件,我们可以学习到如何声明、实例化和使用泛型,理解泛型在实际编程中的作用和优势。实践这些知识,可以帮助我们写出更加安全、高效和易于维护的Java代码。

    JAVA泛型教程(帮你解决学习泛型的苦恼)

    在类 `Gclass&lt;T&gt;` 的例子中,`T` 是一个代表任意类型的占位符,可以被替换为任何实际类型。`getA()` 和 `setA(T)` 方法使用了这个类型参数,确保操作的对象类型一致。 3. **泛型中的继承概念** 泛型并不直接支持...

    SSH泛型代码实例

    - `泛型例子.rar`可能是独立的泛型代码示例,包括如何声明和使用泛型类、接口和方法。 - `DAO(1).rar`可能包含使用泛型的DAO设计模式示例,展示了如何创建泛型DAO以处理不同类型的数据对象。 综上所述,SSH框架...

    JDK1.5泛型讲解和例子

    JDK1.5泛型讲解 不错的东西 对jdk需要研究的朋友不妨看看 新手也来学习学习```

    C__泛型的运用

    ### C# 泛型的应用详解 #### 一、泛型的概念 ...通过学习和掌握泛型的基本概念和用法,开发者可以编写更加高效、可维护的代码。无论是对于初学者还是资深开发人员来说,熟练掌握泛型都是提升编程技能的重要一步。

    泛型之FormDemo

    通过学习这个示例,开发者可以学习到如何在实际项目中有效地应用泛型和反射,提高代码的复用性和可维护性。 总的来说,"泛型之FormDemo"是一个关于如何在Windows Forms开发中使用泛型和反射来优化代码的实例。通过...

    委托例子:自定义委托,泛型委托,多播委托,

    `Func, T2, TResult&gt;`和`Action, T2&gt;`等预定义的泛型委托就是很好的例子。我们可以创建自己的泛型委托,如`MyGenericDelegate, U, V&gt;`: ```csharp public delegate V MyGenericDelegate, U, V&gt;(T arg1, U arg2); `...

    SUN公司Java泛型编程文档

    通过阅读SUN公司的Java泛型编程文档,你可以深入学习这些概念,理解如何在实际项目中有效利用泛型提高代码质量,减少类型转换的麻烦,以及如何避免潜在的运行时错误。文档中的例子和解释将帮助你更好地掌握泛型的...

    Webservice传递泛型的案例,包括web服务端和mobile端

    在这个例子中,`gson.toJson()`将泛型对象转换为JSON字符串,`gson.fromJson()`则将服务器返回的JSON字符串反序列化回泛型类型`T`。 总结起来,这个案例涵盖了以下知识点: 1. 泛型的概念和C#中的泛型使用。 2. Web...

    java 继承泛型类示例

    在这个例子中,`T`是类型参数,代表某种未知的数据类型。当我们创建`Container`实例时,可以指定`T`的具体类型,例如`Container&lt;String&gt;`或`Container&lt;Integer&gt;`。 现在让我们讨论继承泛型类。假设我们有一个泛型类...

Global site tag (gtag.js) - Google Analytics