java泛型深度 理解
来源:互联网 发布:java swing图形界面 编辑:程序博客网 时间:2024/06/06 11:47
泛型总的来说,指不确定的类型
其中掐面三个不叫泛型,但是类似泛型;后面一个代指一些不确定类型是泛型(差不多和模板类似)。
1.下面用到了一个泛型的示例:
/*
* 泛型
*/
public class Test {
public static void main(String args[]){
Person per[]=new Person[5];
per[0]=new Student();
per[1]=new Employee();
((Student) per[0]).print();
((Employee) per[1]).print();
}
}
class Person{
}
class Employee extends Person{
public void print(){
System.out.println("i am employee");
}
}
class Student extends Person{
public void print(){
System.out.println("i am Studnent");
}
}
其中Person就是泛型类.
2.依次类推大家用到Object超类时也是用到了泛型(就是可以代指一切,但是不能代指基本数据类型,这也是为什么要将基本数据类型进行封装称对应的封装类)。
3.还有大家用到的接口(只有实现了这个接口,才可以用这个接口的泛型),如下面示例:
/*
* 泛型
*/
public class Test {
public static void main(String args[]){
Area area[]=new Area[4];
area[0]=new circle(3);
area[1]=new SanJiao(3,4);
area[2]=new BuPi();
System.out.println(area[0].getArea());
System.out.println(area[1].getArea());
System.out.println(area[2].getArea());
}
}
interface Area{
public float getArea();
}
/*
* 形状的基类
*/
class Shape{}
/*
* 这是圆形
*/
class circle extends Shape implements Area{
private int r;
public circle(int r){
this.r=r;
}
public float getArea() {
// TODO Auto-generated method stub
return (float) (3.14*r*r);
}
}
/*
* 这是三角形
*/
class SanJiao extends Shape implements Area{
private int l;
private int h;
public SanJiao(int l,int h){
this.l=l;
this.h=h;
}
public float getArea() {
// TODO Auto-generated method stub
return h*l/2;
}
}
/*
* 这是一张布匹,他也有面积
*/
class BuPi implements Area{
public float getArea() {
// TODO Auto-generated method stub
return 5;
}
}
4.用模板的方式来运用泛型:
java的模板类可以理解为含有Object类型的类。
<1. java的模板类的模板参数只能是参数类型,成员变量类型等,模板名是确定的。
<2. 运行期,模板参数会被当作Object来处理,已经验证
<3. 使用模板类的类型安全,只是利用编译器的类型检查,来自动保证运行期的类型强转的正确与安全。
示例如下:
- class TestTemplate
- {
- public staticvoid main(String[] args)
- {
- //vector<T> v=new vector<T>();
- Byte b=new Byte((byte)0);
- vector<Byte> v=new vector<Byte>(b);
- v.add((byte)0);
- v.add((byte)1);
- v.add((byte)3);
- v.add((byte)2);
- v.visitAll();
- }
- }
- class vector<T>{
- private int size=0;
- private vectorElement<T> head=null;
- private vectorElement<T> last=null;
- public vector(T datum)
- {
- System.out.println("vector(T datum)!");
- this.head=new vectorElement<T>(datum);
- this.last=this.head;
- this.size=1;
- }
- public boolean add(T datum){
- if(this.size==0){
- this.head=new vectorElement<T>(datum);
- this.last=this.head;
- this.size=1;
- }else{
- vectorElement<T> temp=new vectorElement<T>(datum);
- temp.previous=this.last;
- this.last.next=temp;
- this.last=temp;
- this.size=this.size+1;
- }
- return true;
- }
- public void visitAll()
- {
- vectorElement<T> walker;
- walker=head;
- while(walker !=null)
- {
- System.out.println(walker.datum);
- walker=walker.next;
- }
- }
- }
- class vectorElement<T>{
- public vectorElement<T> next=null;
- public vectorElement<T> previous=null;
- public T datum=null;
- public vectorElement(T datum){this.datum=datum; }
- }
- /*
- vector(T datum)!
- 0
- 0
- 1
- 3
- 2
- 请按任意键继续. . .
- */
- java泛型深度 理解
- java深度理解注解
- 深度理解java 字符串
- java深度理解---内存映射方式
- java 之深度理解this关键字
- Java泛型理解
- JAVA泛型理解
- Java 泛型理解
- Java泛型理解
- java泛型理解
- java泛型理解
- Java 泛型理解
- Java泛型理解
- java 泛型数组 深度解析
- Java深度理解——Java字节代码的操纵
- Java深度理解——Java字节代码的操纵
- Java深度理解——Java字节代码的操纵
- Java深度理解——Java字节代码的操纵
- 题目1389:变态跳台阶
- NDK开发历程(一):android native code的调试方法
- C++ 关联容器map的用法
- 安卓中弹窗和自定义弹窗
- MongoDB在Linux环境下安装
- java泛型深度 理解
- MSVC与CRT默认库链接冲突问题
- typedef使用详解
- ireport使用中遇到的问题及解决方法
- 迭代法实现归并排序
- 演化策略和遗传算法的区别
- Missing operation for soapAction and body element
- 用户控件提示没有指定HtmlGenericControl的ID属性是什么错误
- hdu-1257