博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java泛型 之 入门(interface)
阅读量:5977 次
发布时间:2019-06-20

本文共 2907 字,大约阅读时间需要 9 分钟。

一:泛型简单介绍:

(1)所谓泛型,就是变量类型的參数化。

泛型是JDK1.5中一个最重要的特征。通过引入泛型,我们将获得编译时类型的安全和执行时更小的抛出ClassCastException的可能。在JDK1.5中,你能够声明一个集合将接收/返回的对象的类型。使用泛型时假设不指明參数类型,即泛型类没有參数化。会提示警告。此时类型为Object。

(2)为什么使用泛型

使用泛型的典型样例。是在集合中的泛型使用。假设不使用泛型。存入集合中的元素能够是不论什么类型的,当从集合中取出时,全部的元素都是Object类型。须要进行向下的强制类型转换,转换到特定的类型。

比方:
List myIntList = new LinkedList(); // 1
myIntList.add(new Integer(0)); // 2
Integer x = (Integer) myIntList.iterator().next(); // 3   
第三行的这个强制类型转换可能会引起执行时的错误。

泛型的思想就是由程序猿指定类型。这样集合就仅仅能容纳该类型的元素。
使用泛型:
List<Integer> myIntList = new LinkedList<Integer>(); // 1'
myIntList.add(new Integer(0)); // 2'
Integer x = myIntList.iterator().next(); // 3'
将第三行的强制类型转换变为了第一行的List类型说明。编译器会为我们检查类型的正确性。这样,代码的可读性和健壮性也会增强。

(3)泛型使用基础
public interface List <E> {
    void add(E x);
    Iterator<E> iterator();
}
public interface Iterator<E> {
    E next();
    boolean hasNext();
}
尖括号里包括的是形式类型參数(formal type parameters),它们就如同一般的类型一样。能够在整个类的声明中被使用。当类被使用时。会使用详细的实际类型參数(actual type argument)取代。比方前面的样例中的List<Integer>,那么全部的E将会被Integer类型所取代。

泛型类型參数仅仅能被类或接口类型赋值,不能被原生数据类型赋值。原生数据类型须要使用相应的包装类。

形式类型參数的命名:尽量使用单个的大写字母(有时候多个泛型类型时会加上数字。比方T1,T2)。比方很多容器集合使用E,代表element(元素)。Map中用K代表键keys,V代表值。

二 实际应用:

(1) 创建接口ParentInterface 的java文件

package edu.tju.cs;public interface ParentInterface
{ public void setFoo1(T1 foo1); public void setFoo2(T2 foo2); public T1 getFoo1(); public T2 getFoo2();}
(2) 创建实现类ChildClass的java文件

package edu.tju.cs;public class ChildClass
implements ParentInterface
{ private T1 foo1; private T2 foo2; @Override public void setFoo1(T1 foo1){ this.foo1 = foo1; } @Override public void setFoo2(T2 foo2){ this.foo2 = foo2; } @Override public T1 getFoo1(){ return this.foo1; } @Override public T2 getFoo2(){ return this.foo2; } public static void main(String[] args) { ChildClass
cc = new ChildClass
(); cc.setFoo1("徐勤柱"); cc.setFoo2("王昭娴"); System.out.println("get() " + cc.getFoo1()); System.out.println("get() " + cc.getFoo2()); ChildClass
cc2 = new ChildClass
(); cc2.setFoo1(123); cc2.setFoo2("吴明静"); System.out.println("get() " + cc2.getFoo1()); System.out.println("get() " + cc2.getFoo2()); ChildClass
cc3 = new ChildClass
(); cc3.setFoo1("申佳维"); cc3.setFoo2(123.4556); System.out.println("get() " + cc3.getFoo1()); System.out.println("get() " + cc3.getFoo2()); }}
三  学习心得:

(1)java 泛型不能够有基本类型

List<int> list=new ArrayList<int>();//这里。这样是错误的

list.add(0);
list.add(1);
这是由于:泛形要求能包容的是对象类型,而基本类型在java里不属于对象。可是基本类型都有其包装类型,也就是对象类型:
int->Integer
long->Long
....
那么你要想存放基本类型就用其包装类型去实现功能
 List<Integer> list=new ArrayList<Integer>();
list.add(0);
list.add(1);
总之中的一个句话。泛型里面能够放<integer> ,<character>。int,char 基本类型是不能够的。泛型里面是能够放引用类型的,比方放个对象类型。<User>.

http://docs.oracle.com/javase/tutorial/extra/generics/simple.html

转载地址:http://kbsox.baihongyu.com/

你可能感兴趣的文章
redux-form(V7.4.2)笔记(一)
查看>>
钱趣多风控新举措:源头选择与物理隔离
查看>>
puppet最新源码包安装学习笔记
查看>>
vector容器与find算法
查看>>
烂泥:kickstart无人值守安装CentOS6.5
查看>>
Windows Phone 8 开发资源汇总
查看>>
互联网趋势关键词:交流,为价值付费,资源整合
查看>>
阿里钉钉,马云旗下的又一个千亿美金产品?
查看>>
Oracle 11gR2学习之三(创建用户及表空间、修改字符集和Oracle开机启动)
查看>>
熟练掌握Word2003中的突出显示功能
查看>>
编码过程中的问题总结
查看>>
网页与APP中那些优美的登陆表单
查看>>
快速幂取模模板
查看>>
Git:配置
查看>>
神经系统知识普及
查看>>
Spring可扩展Schema标签
查看>>
c++ STL unique , unique_copy函数
查看>>
函数模板的使用说明
查看>>
http://miicaa.yopwork.com/help/overall/
查看>>
浅谈关于特征选择算法与Relief的实现
查看>>