java数据结构与算法分析学习2(泛型--用java5泛型特性视线泛型)
来源:互联网 发布:数组 push pop 编辑:程序博客网 时间:2024/06/15 20:50
JAVA 5支持泛型类,主要包括以下几种应用
1.简单的泛型类和接口
当指定一个泛型类时,类的声明包含一个或多个类型参数,这些参数被放在类名后面的一对尖括号内
public class TestGenericJava5<AnyType> {
private AnyTypevalue;
public void setValue(AnyType x){
this.value = x ;
}
public AnyType getValue(){
returnvalue;
}
public staticvoid main(String[] args) {
TestGenericJava5 s =new TestGenericJava5<String>();
s.setValue("2222");
System.out.println(s.getValue());
}
}
也可以声明接口是泛型的如Comparable接口是泛型的如下public interface Comparable<T> {
public int compareTo(T o);
}
2.自动装箱/拆箱
自动装箱:如果一个int型变量被传递到需要一个INteger对象的地方,那么编译器将会自动完成一个对Integer构造方法的调用。
自动拆箱:如果一个Integer对象被放到需要int的地方,则后台自动完成对intValue()方法的调用
public class TestGenericJava5<AnyType> {
private AnyTypevalue;
public void setValue(AnyType x){
this.value = x ;
}
public AnyType getValue(){
returnvalue;
}
public staticvoid main(String[] args) {
TestGenericJava5<Integer> s = new TestGenericJava5<Integer>();
//自动装箱
s.setValue(2222);
//自动拆箱
int a = s.getValue();
System.out.println(a);
}
}
3.菱形运算符
可以将2中标红的代码改写为如下形式
TestGenericJava5<Integer> s = new TestGenericJava5<>();
4.通配符
为了解决泛型带来的非协变问题引入了通配符的概念。
/**
* <? extends Shape> 代表通配符
* @param arr
* @return
*/
public staticdouble totalArea(Collection<? extends Shape> arr){
double total =0;
for(Shape s:arr){
if(s !=null){
total += s.getStrokeDashOffset();
}
}
return total;
}
5.泛型的一些使用说明1.类型界限
当我们需要限定泛型的值的界限时我们可以通过
Collection<? extends Shape> 这种形式去申明
2.类型擦除
泛型仔很大的程度上是java语言的成分而不是虚拟机的结构。泛型类可以由编译器通过所谓的类型擦除(type erasure)过程而转换成非泛型类。
编译器生成一种与泛型类同名的原始类(row class),但类型参数都被删去了。变量由她们的类型界限来替代。
3.对于泛型的限制
基本类型:基本类型不能用做类型参数。如TestGenericMemoryCell<int> 是非法的
instanceof检测:instanceof检测和类型转换工作只对原始类型进行。
TestGenericJava5<Integer> s = new TestGenericJava5<Integer>();
s.setValue(4);
Object cell = s;
//s2 unchecked
TestGenericJava5<String> s2 = (TestGenericJava5<String>) cell;
//java.lang.Integer cannot be cast to java.lang.String 对应的instanceof检测是非法的
String result = s2.getValue();
System.out.println(result);
static的语境:在一个泛型类中,static方法不可引用类的类型变量泛型类型的实例话:不能创建一个泛型类型的实例
泛型数组对象:不能创建一个泛型的数组。
参数化类型的数组:参数类型的数组的实例话是非法的。
- java数据结构与算法分析学习2(泛型--用java5泛型特性视线泛型)
- java数据结构与算法分析学习2(泛型)
- 利用Java5泛型实现泛型特性成分
- java数据结构与算法分析学习1(递归函数)
- java--加强之 Java5的泛型
- Java基础加强-java5的泛型
- Java-Java5.0泛型解读
- java5-泛型通配符
- 数据结构与算法分析(JAVA版)
- 黑马程序员 java高新技术<三>--java5的注解、java5的泛型
- 数据结构与算法分析 java 版学习笔记 第一章
- 《数据结构与算法分析java语言描述》学习笔记一
- 《数据结构与算法分析java语言描述》学习笔记二
- JAVA5 学习(2)
- Java数据结构与算法分析(1)--算法复杂度概念
- java数据结构学习—泛型算法(Comparator函数对象)
- 利用Java5泛型特性实现泛型构件——简单的泛型类和接口
- java数据结构与算法分析学习(编写一个程序解决选择问题,k=N/2)
- 经验分享之tips(1)
- GCDAsyncUdpSocket的简单使用
- LeetCode (Divide Two Integers)
- 项目积累
- 安装 VPN 时遇到msi error 2503的解决办法
- java数据结构与算法分析学习2(泛型--用java5泛型特性视线泛型)
- linux 的java写程序报异常java.net.InetAddress.getLocalHost(InetAddress.java:1505)解决
- delphi5 ADO BUG;
- 对自己思维的一次巨大冲击
- 计算机系统结构概述
- 数据库角色成员说明
- SQL-内外连接
- Python中类的定义和参数解释
- 题点--机器学习