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

泛型.

阅读更多

/**

* 泛型进阶

* 概念:泛型只是编译时的概念,供编译器进行语法检查时用的

* (由于程序员需要一种类型安全的集合,正是这种需求促成了泛型)

* 目的:

* 1.努力将运行时异常转换成编译时错误,减少运行时异常数量(提高了编译器的能力)

* 2.解决模板编程的问题

* 基本的用法:在使用集合时,用<>指定集合中可以放入的类型

* 注意:

* 1.属性中使用集合时不指定泛型,默认为<Object>

* 2.泛型不同的引用与对象之间都是不兼容的

* 3.引用的泛型与对象的泛型必须一致

*/

import java.util.*;

public class TestGenerics1 {

public static void main(String[] args) {

List<String> l=new ArrayList<String>();

l.add("ABC");

l.add("DEF");

String str=l.get(0);//使用泛型后,获得对象时不用进行强制类型转换

/*错误,试图将IntegerDouble类型的对象放入指定存放String类型对象的集合中

l.add(1);

l.add(1.5);

*/

for(String s:l){//for-each循环 (集合/数组中元素类型 变量:集合/数组名)

System.out.println(s);

}

Map<Integer,String> map=new HashMap<Integer,String>();

map.put(1,"Huxz");

map.put(2,"Liucy");

map.put(3,"TangLiang");

//map.put(1.5,"Liucy");

//map.put("Liucy",1.5);

Set<Integer> keys=map.keySet();

for(Integer i:keys){

String value=map.get(i);

System.out.println(i+"---"+value);

}

List<Number> list=new ArrayList<Number>();

list.add(10);

list.add(1.5);

/*

List<Number> list2;

List<Integer> list3=new ArrayList<Integer>();

list2=list3;

*/

}

 

}

 

/**

* 泛型的通配符(用于方法的参数)

* 1.<?> 允许所有泛型的引用调用

* 2.<? extends Number> 只允许泛型为NumberNumber子类的引用调用

* 3.<? super Number> 只允许泛型为NumberNumber父类的引用调用

* 4.<? extends Comparable> 只允许泛型为实现Comparable接口的实现类的引用调用

* 注意:

* 1.方法参数中使用集合时不指定泛型,默认为<?>

* 2.方法参数中<? extends Number&Comparable>这种修饰符是不支持的

*/

import java.util.*;

import static java.lang.System.*;

public class TestGenerics2 {

public static void main(String[] args) {

List<String> l1=new ArrayList<String>();

List<Object> l2=new ArrayList<Object>();

List<Number> l3=new ArrayList<Number>();

List<Integer> l4=new ArrayList<Integer>();

List<Double> l5=new ArrayList<Double>();

print(l1);

print(l2);

print(l3);

print(l4);

print(l5);

}

//方法参数中使用集合时不指定泛型,默认为<?>

public static void print(List list){

for(Object o:list){

out.println(o);

}

}

/*<?> 允许所有泛型的引用调用

public static void print(List<?> list){

for(Object o:list){

out.println(o);

}

}

*/

/*<? extends Number> 只允许泛型为 NumberNumber子类的引用调用

public static void print(List<? extends Number> list){

for(Number o:list){

out.println(o);

}

}

*/

/*<? extends Comparable> 只允许泛型为实现了Comparable接口的实现类的引用调用

public static void print(List<? extends Comparable> list){

for(Comparable o:list){

out.println(o);

}

}

*/

/*<? super Number> 只允许泛型为NumberNumber父类的引用调用

public static void print(List<? super Number> list){

for(Object o:list){

out.println(o);

}

}

*/

/*方法参数中<? extends Number&Comparable>这种修饰符是不支持的

public static void print(List<? extends Number & Comparable> list){

for(Object o:list){

out.println(o);

}

}

*/

}

 

/**

* 泛型的通配符(用于泛型方法)

* 定义:修饰符 泛型 返回类型 方法名 参数表 抛出的异常

* 1.<T> 允许所有泛型的引用调用

* 2.<T extends Number> 只允许泛型为NumberNumber子类的引用调用

* 3.<T extends Comparable> 只允许泛型为实现了Comparable接口的实现类的引用调用

* 4.<T extends Number&Comparable>只允许泛型为既是NumberNumber子类 又实现了Comparable接口的实现类的引用调用

* 注意:

* 1.泛型方法中<? super Number>这种修饰符是不支持的

*/

import java.util.*;

public class TestGenerics3 {

public static void main(String[] args) {

List<String> l1=new ArrayList<String>();

List<Object> l2=new ArrayList<Object>();

List<Number> l3=new ArrayList<Number>();

List<Integer> l4=new ArrayList<Integer>();

List<Double> l5=new ArrayList<Double>();

String[] a1=new String[10];

Object[] a2=new Object[10];

Number[] a3=new Number[10];

Integer[] a4=new Integer[10];

Double[] a5=new Double[10];

copyFromArray(l1,a1);

copyFromArray(l2,a2);

copyFromArray(l3,a3);

copyFromArray(l4,a4);

copyFromArray(l5,a5);

}

public static <T > void copyFromArray(List<T> l,T[] a){

for(T o:a){

l.add(o);

}

}

/*<T extends Number> 只允许泛型为NumberNumber子类的引用调用

public static <T extends Number > void copyFromArray(List<T> l,T[] a){

for(T o:a){

l.add(o);

}

}

*/

/* 此处不许用super

public static <T super Number> void copyFromArray(List<T> l,T[] a){

for(T o:a){

l.add(o);

}

}

*/

//public static <T,V> void m(List<T> l1,List<V> l2){}

//<T extends Number&Comparable>只允许泛型为既是NumberNumber子类又

// 实现了Comparable<sp>

分享到:
评论
3 楼 guojigjkill 2011-12-14  
谢了。,对我有用
2 楼 q821424508 2010-04-18  
人烟稀少啊
1 楼 qiang_jq 2008-12-04  
谢了!

相关推荐

    JAVA语言与编程第7章容器和泛型.ppt

    JAVA语言与编程第7章容器和泛型.ppt

    五、集合和泛型.xmind

    五、集合和泛型.xmind

    java实验报告——异常、集合类和泛型.pdf

    java实验报告——异常、集合类和泛型.pdf

    Java实用课件第5章继承、接口与泛型.ppt

    Java实用课件第5章继承、接口与泛型.ppt

    .NETC#汇总 -集合、异常、泛型.rar

    在这个`.NETC#汇总 -集合、异常、泛型.rar`压缩包中,主要讨论了这三个核心概念,特别是泛型约束在实际编程中的应用。 首先,集合是C#中存储和管理数据的基本结构。C#提供了多种集合类型,包括数组(Array)、列表...

    练习和解决方案从书知道Go泛型.zip

    这个压缩包"练习和解决方案从书知道Go泛型.zip"显然包含了关于理解和应用Go泛型的实践练习和解答,这对于学习Go语言的开发者来说是非常宝贵的资源。 首先,让我们深入理解Go泛型的基本概念。在Go 1.18版本之前,Go...

    关于java的泛型.doc

    关于Java的泛型,这是Java 5.0版本引入的一项重大特性,旨在提供类型安全的集合操作,并增强代码的重用性和灵活性。泛型允许程序员在设计类或接口时使用类型参数,使得类或接口可以处理任何数据类型,而不必为每种...

    Java语言程序设计:第七章 泛型.ppt

    在上述的"Java语言程序设计:第七章 泛型.ppt"中,我们看到一个简单的栈实现——`MyStack`。最初的`MyStack`类用于存储`int`型数据。这个类包含一个整型数组`data`作为栈的底层实现,以及一个`number`变量来跟踪栈顶...

    Java基础篇:泛型.pdf

    泛型是Java编程语言中用于减少类型转换错误和增强代码安全性的机制,它允许在定义类、接口和方法时使用类型参数。通过这种方式,可以在编译时期捕获那些只有在运行时期才会暴露的类型错误,提高了代码的健壮性。 ...

    Java1_5泛型.zip

    Java 1.5 泛型是Java编程语言中的一项重要特性,它于2004年发布,极大地提升了代码的类型安全性和可读性。泛型允许开发者在类、接口和方法中使用类型参数,从而在编译时就能检查类型错误,避免了运行时的类型转换...

    集合+泛型.docx

    集合和泛型在 Java 中的应用 集合(Collection)是 Java 中的一种数据结构,用于存储和操作数据的集合。泛型(Generic)是 Java 5 中引入的一种特性,用于限制集合中元素的类型。 集合 集合是 Java 中的一种数据...

    Java-泛型.ppt

    ### Java泛型详解 #### 一、什么是泛型? 在Java中引入泛型之前,开发者通常使用`Object`类型的集合来存储多种不同类型的对象。这种方式虽然灵活,但在使用过程中需要频繁进行类型检查或类型转换,这不仅增加了...

    JAVA第八章 泛型.pptx

    泛型是Java编程语言中的一个重要特性,自JDK 5版本起被引入,旨在提高代码的类型安全性,减少类型转换的麻烦,并增强代码的可读性和重用性。泛型的本质是参数化类型,允许我们在定义类、接口或方法时使用类型参数,...

    泛型.zip

    在这个压缩包文件"泛型.zip"中,我们可能找到了关于Java泛型的详细资料,包括概念、使用方式以及相关的最佳实践。 1. **泛型的基本概念**: 泛型允许我们在定义类、接口和方法时,使用类型参数代替具体的类型。这...

    Java 基础泛型.pdf

    Java泛型是Java编程语言中的一个关键特性,它允许开发者在编写代码时引入类型参数,以提高代码的灵活性、安全性和可复用性。泛型的主要目标是在编译时进行类型检查,确保代码在运行时不会出现类型转换异常。下面我们...

    Go 的优雅泛型.zip

    直到 Go 核心团队在 Go 中包含对泛型的支持,genny这是一个代码生成泛型解决方案。它允许您编写正常的可构建和可测试的 Go 代码,当该genny gen工具处理这些代码时,它将用特定类型替换泛型。通用代码是有效的 Go ...

    Java实验3泛型.doc

    实验3的焦点是Java中的泛型,这是一个强大的特性,它允许开发者创建可重用的类型安全的代码。泛型在Java中引入的主要目的是提高代码的类型安全性,减少在运行时出现ClassCastException的可能性,并且在编译阶段就...

    java泛型.xmind

    自己总结的java泛型的笔记,绘制了详细的思维导图,每个思维导图中均有详细的博文解释,方便大家学习和理解,免费分享给大家。适合java的爱好者和学习者

    java接口泛型.pdf

    泛型是Java编程中的一项重要特性,首次引入于Java SE 1.5版本。它的主要目的是提高代码的类型安全性,减少类型转换的繁琐,并且能够提高代码的重用性。泛型通过允许开发者在类、接口和方法中指定类型参数,使得程序...

    Java深度历险之Java泛型.docx

    ### Java泛型详解 #### 一、Java泛型概述 Java泛型(Generics)是Java SE 5.0引入的一项重要新特性,它允许开发者在定义类、接口或方法时使用类型参数(Type Parameters)。类型参数在使用时可以用具体的类型来...

Global site tag (gtag.js) - Google Analytics