`
dou_shini8820
  • 浏览: 81093 次
社区版块
存档分类
最新评论

jdk1.5泛型详细介绍

 
阅读更多

泛型是JDK1.5的新特性

 

1.泛型类

没有泛型之前,一个类的属性有的地方是Integer,有的地方需要是String,这时为了写一个通用的类,我们设置一个类的属性为Object,虽然满足了我们的要求,但是它的属性什么类型都可以设置,因此会产生不安全性。

 

public class Info {
	private Object x;
	private Object y;
	public Object getX() {
		return x;
	}
	public void setX(Object x) {
		this.x = x;
	}
	public Object getY() {
		return y;
	}
	public void setY(Object y) {
		this.y = y;
	}
}

 

 在调用这个类时

 

Info i = new Info();
i.setX(11);
i.setY("helllo");		
Integer x = (Integer) i.getX();//需要向下转换类型
String y = (String) i.getY();		
System.out.println(x+":"+y);

 

 而且,当我们上面代码换成

 

Info i = new Info();
i.setX(11);
i.setY("helllo");
		
Integer x = (Integer) i.getX();
Integer y = (Integer) i.getY();
		
System.out.println(x+":"+y);

 

 eclipse是不会报错的,但是运行时就会出现类型转换错误,他无法把“helllo”这个字符串转换成Integer。泛型的出现解决了这个问题。

 

泛型类的写法很简单,只要在类名后跟<T>就行,T可以写成其他字母,T表示type,属性的类型设置为T,由外部决定。调用这个泛型类时,需要指定T的具体类型

 

package com.luo;
public class Demo<T> {
	private T x;
	private T y;
	public T getX() {
		return x;
	}
	public void setX(T x) {
		this.x = x;
	}
	public T getY() {
		return y;
	}
	public void setY(T y) {
		this.y = y;
	}
}

 

 泛型的调用:

 

Demo<Integer> demo = new Demo<Integer>();
demo.setX(12);
demo.setY(14);

 

 这样demo的属性只能设置为Integer类型

 

泛型类也可以public class Demo<T,D>{}这样写

构造方法也可以这样写

 

public Demo(T x,T y){
	this.x = x;
	this.y=  y;
}

 

 泛型的擦除

Demo d = new Demo();表示泛型的擦除,他将按照Object类型来执行程序,也可以

Demo<Object> d = new Demo<Object>();但是上面的写法有些多余,因此产生了通配符

 

2.通配符?

 

在一个方法中,参数我希望传递一个Demo泛型对象,我希望这个泛型既可以是Demo<Integer>也可以是Demo<String>,这时我可以简单的使用Demo 就可,不带<>,但是eclipse会报黄线;然而即使用Demo<Object>它都会报错的,于是我们使用Demo<?>来表示

 

public static void main(String[] args) {
	Demo<Integer> d1 = new Demo<Integer>();
	Demo<String> d2 = new Demo<String>();
		
	fun(d1);
	fun(d2);
}
	
public static void fun(Demo<?> d){}
 

 

 

2.1泛型上限 “? extends 类” 和泛型下限 “? super 类”

 

泛型上限表示能接收的具体类只能是extends的类的子类和该类本身

 

 

public class Demo2<T extends Number> {

}
 

 

 

Demo2<Integer> dd = new Demo2<Integer>();//正确
Demo2<String> dd = new Demo2<String>();//出错的
 

 

泛型上限也可以在方法上使用

 

 

public static void fun(Demo<? extends Number> d){}
 

 

那么:

 

Demo<Integer> d1 = new Demo<Integer>();
Demo<String> d2 = new Demo<String>();
fun(d1);//正确
fun(d2);//错误
 

 

 

 

 

2、泛型方法

 

泛型方法所在类不一定是泛型类,格式为:

 

public class Info {
public <T>T test(T param){
		return param;
	}
}

 <T>T 就相当于String或者void,传入的参数一般也设置为T类型的

 

	public <T>T test(String param){ //否则这样的有什么意义?
		return (T) param;
	}
 

 

泛型方法也可以返回一个泛型数组

 

public <T>T[] print(T ...params){
	return params;
}
 

 

 

 

public static void main(String[] args) {
	Info i = new Info();
	Integer[] ss1 = i.print(new Integer[]{1,2,3,4});
	Integer[] ss2 = i.print(1,2,3,4);//要学习这种写法
}
public <T>T[] print(T ...param){
	return param;
}
 

 

分享到:
评论

相关推荐

    JDK1.5泛型讲解和例子

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

    JDK1.5泛型使用下载

    Java泛型是在JDK 1.5版本中引入的一项重要特性,极大地增强了类型安全性和代码可读性。泛型允许开发者在类、接口和方法中声明类型参数,从而实现对数据类型的抽象。在泛型的帮助下,开发者可以在编译时进行类型检查...

    JDK1.5泛型.rar

    **Java泛型是JDK1.5引入的一个重要特性,极大地提高了代码的类型安全性和重用性。在泛型出现之前,程序员需要在运行时进行强制类型转换,这可能导致ClassCastException。泛型通过在类、接口和方法声明中引入类型参数...

    JDK1.5的泛型实现.pdf

    JDK1.5的泛型实现.pdf

    JDK1.5的泛型实现.zip

    以下是对JDK 1.5中泛型实现的详细解释: 1. **泛型的概念**:泛型是一种参数化类型,意味着可以在定义类、接口或方法时使用类型参数,而不是具体的类型。这样,同一个类或方法可以适用于多种数据类型。 2. **类型...

    jdk1.5x64位 windows版.zip

    其次,泛型(Generics)是JDK1.5的一大亮点。泛型允许在定义类、接口和方法时指定参数类型,增强了类型检查,减少了类型转换的麻烦,同时也减少了运行时的类型错误。泛型还引入了通配符,如"? extends T"和"? super ...

    jdk1.5 windows版本 64位

    标题:“jdk1.5 windows版本 64位” 描述:“jdk1.5 windows版本 64位,Java开发依赖环境” 标签:“windows” 在这个主题中,我们聚焦的是Oracle JDK 1.5(也被称为Java Development Kit,简称JDK)在Windows...

    linux系统jdk1.5下载

    JDK1.5引入了一些重要的特性,如增强的for循环(foreach)、匿名内部类的改进、枚举类型以及泛型的初步支持。这些特性对Java编程产生了深远影响,提升了代码的可读性和安全性。 然而,由于JDK1.5已不再受官方支持,...

    Java-jdk1.5安装包

    JDK1.5,也称为Java 5.0,是一个重要的版本,它引入了许多新的特性和改进,对Java语言的发展产生了深远影响。 一、泛型(Generics) 在Java 5.0中,最重要的特性之一就是泛型的引入。泛型允许开发者在定义类、接口...

    JDK1.5的32位和64位安装包

    在本文中,我们将详细探讨JDK1.5的一些核心知识点。 首先,JDK1.5最重要的特性之一是泛型(Generics)。泛型允许在类、接口和方法中使用类型参数,从而提高了代码的类型安全性和可读性。通过泛型,开发者可以限制...

    JDK 1.5的泛型實現(Generics in JDK 1.5)

    今天,JDK1.5終於內建泛型特性,不僅編譯器不再需要 任何外力(外掛附件)的幫助,整個 Java標準程式庫也被翻新(retrofit),許多 角落針對泛型做了改寫。 讓我們把帶有「參數化型別」(parameterized types)的 ...

    JDK1.5,JDK1.5

    以下将详细阐述JDK1.5的关键知识点: 1. **泛型(Generics)** 泛型是JDK1.5最重要的特性之一,它允许在类、接口和方法声明中使用类型参数,以实现数据类型的参数化。泛型提高了代码的类型安全性和可读性,减少了...

    详细介绍JDK1.5的各种新特性

    以下是JDK1.5中的主要新特性及其详细解释: 1. **泛型(Generics)**:泛型是JDK1.5引入的最大变革之一。它允许在类、接口和方法中使用类型参数,提高了代码的类型安全性和重用性。泛型帮助程序员在编译时检查类型...

    包含 jdk1.5免安装、jdk1.6免安装、jdk1.8(32和64)

    这个压缩包包含了三个不同版本的JDK:JDK 1.5、JDK 1.6和JDK 1.8,其中1.5和1.6是早期版本,而1.8是最流行且广泛使用的版本之一。 **JDK 1.5(也称为Java 5.0)** JDK 1.5在2004年发布,引入了许多重要的新特性,如...

    java经典教程-JDK1.5的泛型实现

    Java泛型是自JDK 1.5版本引入的一项重要特性,它极大地提高了代码的类型安全性和重用性。在本教程中,我们将深入探讨Java...通过阅读“JDK1.5的泛型实现.pdf”这份文档,你应该能更深入地理解泛型的细节和实际应用。

    JDK1.5新特性泛型_深入研究.doc

    ### JDK1.5新特性泛型深入研究 #### 一、引言 随着软件工程的发展,类型安全成为了程序设计中的一个重要考量因素。Java作为一种广泛使用的编程语言,在其发展历程中不断引入新的特性以满足日益增长的需求。JDK1.5...

    JDK1.5的泛型实现

    以下是关于JDK 1.5泛型实现的详细解释: 1. **类型参数**:泛型的基本单位是类型参数,它在声明时用尖括号 `&lt;T&gt;` 表示,其中 `T` 是一个占位符,代表某种未知的类型。例如,在创建一个可以存储任意类型的列表时,...

    Jdk15泛型的实现

    直至JDK1.5,泛型技术终于被正式集成到Java的核心功能中,不仅编译器原生支持泛型,整个Java标准库也进行了重构以更好地兼容泛型。 #### 泛型的关键概念与实践 **参数化类型(Parameterized Types)** 参数化类型...

    IBMJDK1.5linux.zip

    在压缩包"IBMJDK1.5linux.zip"中,主要包含的是IBM JDK 1.5的安装文件和相关文档。安装完成后,开发者可以通过设置环境变量(如JAVA_HOME、PATH)来使用这个JDK。通常,这个JDK会包含Java编译器(javac)、Java解释...

    jdk1.5 windows 64位官方正式版,绝对有效

    在JDK1.5中,最重要的变化之一是引入了泛型。泛型允许在定义类、接口和方法时指定类型参数,从而增强了类型安全性和代码重用性。通过泛型,开发者可以在编译时检查类型,避免了运行时的强制类型转换,减少了可能的...

Global site tag (gtag.js) - Google Analytics