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

Java泛型之上限界定符总结

    博客分类:
  • Java
阅读更多

    在学习Java泛型的过程中,我们常常看到这样泛型的使用, class Person<E extends Number>, 这个表示什么呢,这个其实就是java 泛型的upper bound(上限界定),它给我们带来了什么呢?实际上,它定义了以下3个内容:

 

  1. 限定了一组可用于实例化泛型参数的类型。
  2. 能够访问基类所定义的所有非private成员(方法以及属性)。
  3. 在编译成字节码时,用基类代替所有的占位符E。

先来看第一点,E extends Number表示在实例化这个类型参数的时候,只能使用Number的子类进行实例化。如:
Person p1= new Person<Long>();// ok
Person p2=new Person<String>();//wrong
 因为String并不是Number的子类,所以在进行实例化E类型参数时,编译器会提示错误。


对于第二点,我们看个例子,首先定义一个父子关系,Animal和AnimalSub,并在Animal中分别定义public/protected/private方法两份,一份对应于static,另一份对应于非static

Animal Class:
public class Animal {
	public static void staticPublicMethod() {
		System.out.println("staticPublicMethod");
	}

	protected static void staticProtectedMethod() {
		System.out.println("staticProtectedMethod");
	}

	private static void staticPrivateMethod() {
		System.out.println("staticPrivateMethod");
	}

	public void publicMethod() {
		System.out.println("publicMethod");
	}

	protected void protectedMethod() {
		System.out.println("protectedMethod");
	}

	private void privateMethod() {
		System.out.println("privateMethod");
	}
}
 

   AnimalSub class:
public class AnimalSub extends Animal {

}
 
然后我们来使用这个泛型的上限界定符,
public class Person <E extends Animal>{
	private E e;
	public Person(E animal)
	{
		e=animal;
	}
	
	public void invokeNumberMethod()
	{
		e.staticPublicMethod();
		e.staticProtectedMethod();
		
		e.publicMethod();
		e.protectedMethod();
	}
}
 
从Person类可以看出,除了Animal中的private的方法,我们都可以进行调用,属性成员类似。这里E代表Animal的子类或者Animal本身,与类的extends有些差别。


第三点是在编译器将java代码编译成字节码的时候,会使用上限界定的基类把占位符都替换掉,对于上面的Person类,编译后,实际上就是:
public class Person {
	private Animal e;
	public Person(Animal animal)
	{
		e=animal;
	}
	
	public void invokeNumberMethod()
	{
		e.staticPublicMethod();
		e.staticProtectedMethod();
		
		e.publicMethod();
		e.protectedMethod();
	}
}
   可以看出,原先的占位符E都被Animal所代替了。

2
0
分享到:
评论
1 楼 新入职 2010-07-30  
看看...哈哈

相关推荐

    很好的Java泛型的总结

    Java泛型机制详解 Java泛型是Java语言中的一种机制,用于在编译期检查类型安全。Java泛型的出现解决了Java早期版本中类型安全检查的缺陷。Java泛型的好处是可以在编译期检查类型安全,避免了运行时的...

    java泛型技术之发展

    Java泛型是Java编程语言中的一个关键特性,它在2004年随着Java SE 5.0的发布而引入,极大地增强了代码的类型安全性和重用性。本篇文章将深入探讨Java泛型的发展历程、核心概念以及其在实际开发中的应用。 1. **发展...

    JAVA泛型加减乘除

    这是一个使用JAVA实现的泛型编程,分为两部分,第一部分创建泛型类,并实例化泛型对象,得出相加结果。 第二部分用户自行输入0--4,选择要进行的加减乘除运算或退出,再输入要进行运算的两个数,并返回运算结果及...

    Java泛型的用法及T.class的获取过程解析

    Java泛型的用法及T.class的获取过程解析 Java泛型是Java编程语言中的一种重要特性,它允许开发者在编写代码时指定类型参数,从而提高代码的灵活性和可读性。本文将详细介绍Java泛型的用法 及T.class的获取过程解析...

    Java泛型应用实例

    Java泛型是Java编程语言中的一个强大特性,它允许我们在定义类、接口和方法时指定类型参数,从而实现代码的重用和类型安全。在Java泛型应用实例中,我们可以看到泛型如何帮助我们提高代码的灵活性和效率,减少运行时...

    Java泛型编程最全总结

    Java泛型是Java编程语言中的一个关键特性,它在2004年随着JDK 5.0的发布被引入,极大地增强了代码的类型安全性和重用性。泛型允许我们在编写类、接口和方法时指定参数化类型,使得代码在编译时期就能捕获类型错误,...

    Java泛型三篇文章,让你彻底理解泛型(super ,extend等区别)

    Java 泛型详解 Java 泛型是 Java SE 5.0 中引入的一项特征,它允许程序员在编译时检查类型安全,从而减少了 runtime 错误的可能性。泛型的主要优点是可以Reusable Code,让程序员编写更加灵活和可维护的代码。 ...

    思维导图之Java泛型详解

    思维导图之Java泛型详解

    Java泛型技术之发展

    Java泛型技术的发展历程及其在JDK1.4中的实现,是IT领域特别是软件开发与设计中的一个重要里程碑。本文将深入探讨泛型技术的概念、历史背景、与其它编程概念的区别,以及其在Java语言中的具体应用。 ### 泛型技术...

    1.java泛型定义.zip

    1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1.java泛型定义.zip1....

    java 泛型方法使用示例

    Java 泛型是Java SE 5.0引入的一项重要特性,极大地增强了代码的类型安全性和重用性。泛型方法是泛型技术在类方法层面的应用,它允许我们定义一个可以处理多种数据类型的通用方法。下面我们将深入探讨Java泛型方法的...

    java 泛型接口示例

    Java 泛型是Java SE 5.0引入的一项重要特性,极大地增强了代码的类型安全性和重用性。泛型接口是泛型在接口中的应用,它允许我们在接口中定义带有类型参数的方法,使得实现该接口的类可以使用不同的数据类型。下面...

    4.java泛型的限制.zip

    4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip...

    Java泛型技术之发展.pdf

    Java泛型是Java编程语言中的一个关键特性,它在2004年随着Java SE 5.0的发布而引入,极大地增强了代码的类型安全性和重用性。本篇文章将深入探讨Java泛型的发展历程、核心概念以及其在实际开发中的应用。 1. **发展...

    Java泛型总结(2)进阶篇

    Java泛型是Java SE 5.0引入的一个重要特性,极大地提高了代码的类型安全性和重用性。在本文中,我们将深入探讨Java泛型的进阶概念,包括通配符、边界、类型擦除以及在实际开发中的应用。 1. 通配符 通配符在Java...

    java 泛型类的类型识别示例

    在Java编程语言中,泛型(Generics)是一种强大的特性,它允许我们在编写代码时指定容器(如集合)可以存储的数据类型。这提高了代码的安全性和效率,因为编译器可以在编译时检查类型,避免了运行时...

Global site tag (gtag.js) - Google Analytics