泛型使用延伸
当创建了带泛型声明的接口,父类之后,可以为该接口创建实现类,或从该父类来派生子类,但值得指出的是,当使用这些接口,父类时不能再包含类型形参。下面代码是错误的:
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 GUI编程、JDBC数据库编程、Java注释、Java的IO流体系、Java多...
《疯狂Java讲义》深入介绍了Java编程的相关方面,全书内容覆盖了Java的基本语法结构、Java的面向对象特征、Java集合框架体系、Java泛型、异常处理、Java GUI编程、JDBC数据库编程、Java注释、Java的IO流体系、Java多...
接着,Java SE(标准版)的学习会延伸到反射、注解、泛型等进阶主题,这些在实际开发中有着广泛的应用。同时,对于想要从事Web开发的人员,Java EE(企业版)的学习不可或缺,包括Servlet、JSP、JDBC、Spring框架、...
这可能包括Java的进阶主题,如反射、注解、I/O流、网络编程、JDBC数据库访问、XML处理、Swing或JavaFX图形界面设计,甚至可能涉及到Java的泛型、模块系统和Lambda表达式等Java 8及以后版本的新特性。 总的来说,...
13. **Java EE**:虽然标题没有明确提及,但学习Java通常会延伸到Java企业版(Java EE),包括Servlet、JSP、JDBC等Web开发技术。 通过《21天学通JAVA英文版》的学习,你将具备扎实的Java基础,为进一步深入学习...
学习如何选择合适的集合类型,以及如何使用迭代器和泛型,可以提升代码的效率和可读性。 线程是并发编程的基础,Java提供了Thread类和Runnable接口,支持多线程编程。理解线程同步和互斥的概念,以及synchronized...
这些基础知识是理解和使用Java进行编程的基础,对初学者至关重要。学习者可以通过这些提示更好地理解面向对象编程的概念,以及如何在Java中实现它们。 其次,书中的内容延伸到更高级的主题,如异常处理、多线程、...
泛型的引入提高了代码的类型安全,增强了容器的使用效率。 最后,Java标准库(Java API)包含了大量的类和接口,如IO流、日期时间API、数学运算、字符串处理等,熟练掌握并能灵活运用这些类库是提高编程效率的关键...
下面,我们将详细探讨这些经典例子可能涵盖的知识点,并延伸到相关的Java编程主题。 1. **基础语法**:Java的基础语法包括变量定义、数据类型、运算符、流程控制(如if-else,switch,for,while等)、方法定义与...
【描述】提到“这个事接原来那个java代码的”,暗示这可能是一个持续性的学习过程,代码是基于之前学习的基础进行的延伸。它强调了这个代码集合的完整性,意味着覆盖了更多的知识点。同时,“当时我们实验用的”表明...
通过习题,你可以掌握ArrayList、LinkedList、HashSet、HashMap等容器的使用方法,以及泛型、迭代器等相关知识。 4. **异常处理**:Java的异常处理机制使得程序更加健壮,习题会涉及try-catch-finally语句块、异常...
同时,Java的常用工具类、集合、泛型、反射和注解等也是本阶段的重点。对于IO流操作,学习者需要了解File类的各种操作、递归、字节流、缓冲流、打印流、序列化和反序列化,以及多线程的原理和实践,包括线程的创建、...
它还包含了Java语言的关键更新,比如泛型、枚举类型、可变参数等,提高了代码的类型安全性和可读性。此外,NIO.2(New I/O API)的引入增强了文件系统操作的能力。 **J2EE(Java 2 Platform, Enterprise Edition)...
通过解构'demo'项目,我们将探讨Java在实际开发中的应用,涵盖类、对象、封装、继承、多态等核心概念,并延伸到异常处理、集合框架、IO流、线程管理等多个方面。" 【标签】: "Java" 【详细知识点】 1. **Java语言...
- **C++**:作为 C 语言的延伸,C++ 支持多种编程范式,包括过程化编程、面向对象编程以及泛型编程。这些特性的结合使得 C++ 成为一个高度灵活的语言,能够适应各种复杂的应用场景。例如,在游戏开发、高性能计算等...
在IT行业中,"Hello, World!"程序通常被视为编程语言学习的起点,...通过不断地实践和深入学习,开发者可以逐渐掌握Java的各种特性,如异常处理、多线程、集合框架、IO流、网络编程以及高级特性如泛型、枚举、注解等。
泛型编程(如C++模板,Java泛型) generator 生成器 生成器(如Python中的生成器表达式) getter 获取器 getter方法(获取对象属性) global 全局的 全局变量、全局作用域 graphic 图形 图形界面、图像处理 ...
在当前的软件开发领域,SpringBoot框架因其便捷的配置、快速的开发效率以及强大的功能集成功能,已成为Java开发者们的首选之一。本系统以SpringBoot为核心,构建了一个社团管理系统,旨在提高社团管理的效率和规范性...
1. Boost库是一个跨平台的C++库,它提供了大量的模板类和函数,覆盖了字符串处理、正则表达式、数据结构、算法、泛型编程等领域。开发者可以借助Boost库来解决许多常见的编程问题,而无需从头开始编写代码。 2. ...
Kotlin的特性还延伸到泛型、类型推断、协程等高级话题。泛型允许我们在编写代码时提供更强的类型安全性,而类型推断则让我们的代码看起来更加整洁。协程是Kotlin解决异步编程问题的关键,它通过提供非阻塞的控制流,...