`
runfeel
  • 浏览: 935799 次
文章分类
社区版块
存档分类
最新评论

Java泛型使用延伸

 
阅读更多

泛型使用延伸

当创建了带泛型声明的接口,父类之后,可以为该接口创建实现类,或从该父类来派生子类,但值得指出的是,当使用这些接口,父类时不能再包含类型形参。下面代码是错误的:

Public class A extendsApple<T>{}

代码可以改为:

public classRedApple extends Apple<String>{

}

如果使用Apple类时没有传入实际的类型参数,Java编译器可能发出警告:使用了未经检查或不安全的操作――这就是泛型检查的警告。可以通过为Javac命令增加-Xlint:unchecked选项来看到详细提示。

不管泛型类型的实际类型参数是什么,它们在运行时总有同样的类(class),并没有生成新的class文件,也不会当作新类来处理。

public static voidmain(String[] args){

Apple<String> a1 = newApple<String>("Apple");

System.out.println(a1.getInfo());

Apple<Double> a2 = newApple<Double>(2.00);

System.out.println(a2.getInfo());

System.out.println(a1.getClass()==a2.getClass());

}

Output:

Apple

2.0

True

泛型对其所有可能的类型参数,都具有同样的行为,从而可以把相同的类当成许多哦不同的类来处理。类的静态变量和方法也在所有的实例间共享,所以在静态方法,静态初始化或者静态变量的声明和初始化中不允许使用类型形参,instanceof也是一样不能跟形参。

如果使用泛型,只要代码在编译时没有出现警告,就不会遇到运行时ClasCastException.

为了表示各种泛型List的父类,我们需要使用类型通配符 – 问号(?), 问号作为类型实参传给List集合,写作Collection<?>,意思是未知类型元素的List。这样不管使用任何类型的Collection来调用它,都是安全的,因为类型是Object.

import java.awt.Canvas;

public abstract class Shape {

public abstract void draw(Canvas c);

}

public classCircle extends Shape{

@Override

public voiddraw(Canvas c) {

// TODO Auto-generated method stub

System.out.println("Circle "+c);

}

}

public classRectangle extends Shape{

@Override

public voiddraw(Canvas c) {

// TODO Auto-generated method stub

System.out.println("Rectangle "+c);

}

}

import java.util.List;

public classCanvas {

public voiddrawAll(List<?> shapes){

for(Objectobj : shapes){

Shape s =(Shape)obj;

}

}

}

支持泛型的方法:

import java.util.ArrayList;

import java.util.Collection;

public classTestGenericMethod {

static<T> voidfromArrayToCollection(T[] a, Collection<T> c){

for(To:a){

c.add(o);

}

System.out.println(c.size());

}

public static voidmain(String[] args){

Object[] oa = newObject[100];

Collection<Object>co = new ArrayList<Object>();

fromArrayToCollection(oa,co);

String[] str = newString[200];

Collection<Object>co1 = new ArrayList<Object>();

fromArrayToCollection(str,co1);

Double[] dou = newDouble[200];

Collection<Object>co2 = new ArrayList<Object>();

fromArrayToCollection(dou,co2);

Integer[] Inte = newInteger[100];

Collection<Object>co3 = new ArrayList<Object>();

fromArrayToCollection(Inte,co3);

}

}

Output:

100

200

200

100

分享到:
评论

相关推荐

    疯狂Java讲义代码

    《疯狂Java讲义》深入介绍了Java编程的相关方面,全书内容覆盖了Java的基本语法结构、Java的面向对象特征、Java集合框架体系、Java泛型、异常处理、Java GUI编程、JDBC数据库编程、Java注释、Java的IO流体系、Java多...

    疯狂 Java 讲义(第2版).zip

    《疯狂Java讲义》深入介绍了Java编程的相关方面,全书内容覆盖了Java的基本语法结构、Java的面向对象特征、Java集合框架体系、Java泛型、异常处理、Java GUI编程、JDBC数据库编程、Java注释、Java的IO流体系、Java多...

    四年来个人收藏的java自学视频

    接着,Java SE(标准版)的学习会延伸到反射、注解、泛型等进阶主题,这些在实际开发中有着广泛的应用。同时,对于想要从事Web开发的人员,Java EE(企业版)的学习不可或缺,包括Servlet、JSP、JDBC、Spring框架、...

    Java编程技术(谭浩强编)下载

    这可能包括Java的进阶主题,如反射、注解、I/O流、网络编程、JDBC数据库访问、XML处理、Swing或JavaFX图形界面设计,甚至可能涉及到Java的泛型、模块系统和Lambda表达式等Java 8及以后版本的新特性。 总的来说,...

    21天学通JAVA英文版

    13. **Java EE**:虽然标题没有明确提及,但学习Java通常会延伸到Java企业版(Java EE),包括Servlet、JSP、JDBC等Web开发技术。 通过《21天学通JAVA英文版》的学习,你将具备扎实的Java基础,为进一步深入学习...

    java举一反三

    学习如何选择合适的集合类型,以及如何使用迭代器和泛型,可以提升代码的效率和可读性。 线程是并发编程的基础,Java提供了Thread类和Runnable接口,支持多线程编程。理解线程同步和互斥的概念,以及synchronized...

    500个JAVA(英文)

    这些基础知识是理解和使用Java进行编程的基础,对初学者至关重要。学习者可以通过这些提示更好地理解面向对象编程的概念,以及如何在Java中实现它们。 其次,书中的内容延伸到更高级的主题,如异常处理、多线程、...

    java编程技术(经典中的经典)

    泛型的引入提高了代码的类型安全,增强了容器的使用效率。 最后,Java标准库(Java API)包含了大量的类和接口,如IO流、日期时间API、数学运算、字符串处理等,熟练掌握并能灵活运用这些类库是提高编程效率的关键...

    java经典100例-经典

    下面,我们将详细探讨这些经典例子可能涵盖的知识点,并延伸到相关的Java编程主题。 1. **基础语法**:Java的基础语法包括变量定义、数据类型、运算符、流程控制(如if-else,switch,for,while等)、方法定义与...

    初学Java实验小代码

    【描述】提到“这个事接原来那个java代码的”,暗示这可能是一个持续性的学习过程,代码是基于之前学习的基础进行的延伸。它强调了这个代码集合的完整性,意味着覆盖了更多的知识点。同时,“当时我们实验用的”表明...

    Thinking in Java 4th Edition 习题答案

    通过习题,你可以掌握ArrayList、LinkedList、HashSet、HashMap等容器的使用方法,以及泛型、迭代器等相关知识。 4. **异常处理**:Java的异常处理机制使得程序更加健壮,习题会涉及try-catch-finally语句块、异常...

    Java学习零基础到架构师学习路线

    同时,Java的常用工具类、集合、泛型、反射和注解等也是本阶段的重点。对于IO流操作,学习者需要了解File类的各种操作、递归、字节流、缓冲流、打印流、序列化和反序列化,以及多线程的原理和实践,包括线程的创建、...

    j2ee+me+se

    它还包含了Java语言的关键更新,比如泛型、枚举类型、可变参数等,提高了代码的类型安全性和可读性。此外,NIO.2(New I/O API)的引入增强了文件系统操作的能力。 **J2EE(Java 2 Platform, Enterprise Edition)...

    demo

    通过解构'demo'项目,我们将探讨Java在实际开发中的应用,涵盖类、对象、封装、继承、多态等核心概念,并延伸到异常处理、集合框架、IO流、线程管理等多个方面。" 【标签】: "Java" 【详细知识点】 1. **Java语言...

    电脑编程有哪些.pdf

    - **C++**:作为 C 语言的延伸,C++ 支持多种编程范式,包括过程化编程、面向对象编程以及泛型编程。这些特性的结合使得 C++ 成为一个高度灵活的语言,能够适应各种复杂的应用场景。例如,在游戏开发、高性能计算等...

    helloworld

    在IT行业中,"Hello, World!"程序通常被视为编程语言学习的起点,...通过不断地实践和深入学习,开发者可以逐渐掌握Java的各种特性,如异常处理、多线程、集合框架、IO流、网络编程以及高级特性如泛型、枚举、注解等。

    常见编程术语英汉对照

    泛型编程(如C++模板,Java泛型) generator 生成器 生成器(如Python中的生成器表达式) getter 获取器 getter方法(获取对象属性) global 全局的 全局变量、全局作用域 graphic 图形 图形界面、图像处理 ...

    基于SpringBoot的社团管理系统.zip

    在当前的软件开发领域,SpringBoot框架因其便捷的配置、快速的开发效率以及强大的功能集成功能,已成为Java开发者们的首选之一。本系统以SpringBoot为核心,构建了一个社团管理系统,旨在提高社团管理的效率和规范性...

    Boost程序库完全开发指南

    1. Boost库是一个跨平台的C++库,它提供了大量的模板类和函数,覆盖了字符串处理、正则表达式、数据结构、算法、泛型编程等领域。开发者可以借助Boost库来解决许多常见的编程问题,而无需从头开始编写代码。 2. ...

    RedBook:这是红皮书项目!

    Kotlin的特性还延伸到泛型、类型推断、协程等高级话题。泛型允许我们在编写代码时提供更强的类型安全性,而类型推断则让我们的代码看起来更加整洁。协程是Kotlin解决异步编程问题的关键,它通过提供非阻塞的控制流,...

Global site tag (gtag.js) - Google Analytics