`
scanfprintf123
  • 浏览: 79190 次
  • 性别: 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泛型编程指南.pdf

    Java泛型编程指南.pdf 此文章译自SUN的泛型编程指南

    Java泛型和集合

    Java Generics and Collections 英文版,详细描述java 泛型技术

    很好的Java泛型的总结

    很好的Java泛型的总结,看完之后你一定会知道java泛型的底层机制,你一定会学会Java泛型!

    java泛型技术之发展

    java泛型技术之发展,学习JAVA 泛型的不错东东

    全面总结Java泛型

    • 全面总结Ja• 全面总结Java泛型v• 全面总结Ja• 全面总结Java泛型va泛型a泛型• 全面• 全面总结Java泛型• ... 全面总• 全面总结Java泛型结Java泛型• 全面总结Java泛型• 全面总结• 全面总结Java泛型Java泛型

    java 泛型接口示例

    java 泛型接口示例 java 泛型接口示例 java 泛型接口示例

    JAVA泛型加减乘除

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

    Java泛型技术之发展

    Java泛型技术之发展

    java 泛型类的类型识别示例

    java 泛型类的类型识别示例 java 泛型类的类型识别示例 java 泛型类的类型识别示例

    java 泛型方法使用示例

    java 泛型方法使用示例 java 泛型方法使用示例 java 泛型方法使用示例

    java泛型总结

    深入理解java泛型,包括类名泛型的定义,方法泛型定义,泛型的返回

    思维导图之Java泛型详解

    思维导图之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泛型学习ppt

    java,学习java泛型,java培训之泛型.pptxjava培训之泛型.pptxjava培训之泛型.pptxjava培训之泛型.pptx

    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泛型的用法及T.class的获取过程解析

    主要介绍了Java泛型的用法及T.class的获取过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    java泛型详解.pdf

    java泛型详解.pdf

    Java泛型技术之发展.pdf

    Java泛型技术之发展.zip 中文完整版

    实例讲解Java泛型编程的快速入门

    实例讲解Java泛型编程的快速入门实例讲解Java泛型编程的快速入门实例讲解Java泛型编程的快速入门实例讲解Java泛型编程的快速入门实例讲解Java泛型编程的快速入门

Global site tag (gtag.js) - Google Analytics