java泛型 之 入门(interface)
一:泛型简单介绍:
(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<T1,T2>{
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<T1,T2> implements ParentInterface<T1, T2>{
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<String,String> cc = new ChildClass<String,String>();
cc.setFoo1("徐勤柱");
cc.setFoo2("王昭娴");
System.out.println("get() " + cc.getFoo1());
System.out.println("get() " + cc.getFoo2());
ChildClass<Integer,String> cc2 = new ChildClass<Integer,String>();
cc2.setFoo1(123);
cc2.setFoo2("吴明静");
System.out.println("get() " + cc2.getFoo1());
System.out.println("get() " + cc2.getFoo2());
ChildClass<String,Number> cc3 = new ChildClass<String,Number>();
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
java泛型 之 入门(interface)的更多相关文章
- 大白话说Java泛型:入门、使用、原理
文章首发于[博客园-陈树义],点击跳转到原文<大白话说Java泛型:入门.使用.原理> 远在 JDK 1.4 版本的时候,那时候是没有泛型的概念的.当时 Java 程序员们写集合类的代码都 ...
- Java泛型入门
Java泛型入门 在学习本章之前,须要对Java的集合(Collection.Map)有一定的基础. Java集合有一个缺点.就是把一个对象"丢进"集合里后,集合就会&qu ...
- 大白话说Java泛型(一):入门、原理、使用
文章首发于[博客园-陈树义],点击跳转到原文<大白话说Java泛型(一):入门.原理.使用> 远在 JDK 1.4 版本的时候,那时候是没有泛型的概念的.当时 Java 程序员们写集合类的 ...
- JavaSE入门学习21:Java面向对象之接口(interface)(二)
一接口实现的多态 在上一篇博文:JavaSE入门学习20:Java面向对象之接口(interface)(一)中提到了接口的实现存在多态性,那么 这一篇主要就要分析接口实现的多态. 实例一 Test.j ...
- JAVA WEB快速入门之从编写一个基于SpringBoot+Mybatis快速创建的REST API项目了解SpringBoot、SpringMVC REST API、Mybatis等相关知识
JAVA WEB快速入门系列之前的相关文章如下:(文章全部本人[梦在旅途原创],文中内容可能部份图片.代码参照网上资源) 第一篇:JAVA WEB快速入门之环境搭建 第二篇:JAVA WEB快速入门之 ...
- JAVA WEB快速入门之通过一个简单的Spring项目了解Spring的核心(AOP、IOC)
接上篇<JAVA WEB快速入门之从编写一个JSP WEB网站了解JSP WEB网站的基本结构.调试.部署>,通过一个简单的JSP WEB网站了解了JAVA WEB相关的知识,比如:Ser ...
- Java基础系列二:Java泛型
该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 一.泛型概述 1.定 ...
- Java——Java泛型
该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 一.泛型概述 1.定 ...
- 20、Java 泛型
1.晓之以理,动之以码 学Java就是很上头哦,一来直接三连问!!! 什么是泛型?为什么要用泛型?泛型怎么用? 当然泛型在Java中有很重要的一个地位,在面向对象编程以及在各种设计模式中有非常广泛的应 ...
随机推荐
- 手动加入PE文件数字签名信息及格式具体解释图之下(历史代码,贴出学习)
#include <windows.h> HANDLE hWriteFileHandle = NULL ; HANDLE hReadFileHandle = NULL ; HANDLE h ...
- google浙大招聘笔试题 师兄只能帮你到这儿了
google浙大招聘笔试题 一.单选1.80x86中,十进制数-3用16位二进制数表示为?00100002.假定符号-.*.$分别代表减法.乘法和指数运算,且 1)三个运算符优先级顺序是:-最高,*其 ...
- Control.Invoke和Control.BeginInvoke
问题的引入 下面有个简单的demo,大家一看代码就知道效果如何示例.我新建一个winform的程序,然后写入了如下代码: using System; using System.Windows.Form ...
- 图片组件——axure线框图部件库介绍
我们在后面的组件使用中,都统一使用"从部件区域拖拽图片组件到页面区域中" 1. 图片载入 1.1 将图片组件拖拽到页面区域 1.2 双击图片组件 1.3 选择合适图片,点击打开 1 ...
- 【zigbee】开启及清除NV_RESTORE信息的方法
1.NV_RESTORE宏的作用 问:coo和终端都已经组网成功 1.这时将coo断电,又一次上电,组网后终端的短地址是否不变? 2.这时终端断电,又一次上电,组网后终端的短地址是否不变? 3.这时C ...
- html-图片button,抓包---Shinepans
askLike.html <html> <meta http-equiv="content-type" content="text/html;chars ...
- Linux账号管理(二)
再次声明,整理此系列Linux博客,主要目的不是介绍各种命令,而是去探索命令背后的理论. 本篇主要介绍用户的创建与删除. 创建用户主要用到useradd命令,在用此命令时可以指定各种参数.一般默认就可 ...
- 进阶:案例三: Upload File using WebDynpro
1.节点创建,其中DATASOURCE存放uploadfile名称 2.layout布局 3.upload事件代码: method ONACTIONUPLOAD . DATA: lo_Node typ ...
- SGU114-Telecasting station
114. Telecasting station time limit per test: 0.5 sec. memory limit per test: 4096 KB Every city in ...
- Codeforces Round #197 (Div. 2) D. Xenia and Bit Operations
D. Xenia and Bit Operations time limit per test 2 seconds memory limit per test 256 megabytes input ...