Java学习笔记九(泛型)
1.介绍
所谓的泛型就是将类型作为一种參数来传递。有了泛型后类型不再是一成不变的。能够通过泛型參数来指定。
能够提供程序开发的灵活性。
2.泛型类或接口的使用
泛型类声明时。与普通类没有太大的差别,仅仅是在类中增加了类型变量的声明
public class 类名<类型变量>{..........................................................................}
<span style="font-family:SimSun;font-size:18px;">package com.fanxing; //自己定义的泛型类
class MyValue<T,U>
{
//定义两个由类型变量指定类型的成员变量
private T value1;
private U value2;
//定义两个成员变量的set方法,其參数类型由类型变量确定
public void setValue(T newValue1,U newValue2)
{
this.value1=newValue1;
this.value2=newValue2;
}
//value1成员变量的get方法
public T getValue1()
{
return this.value1;
}
//value2成员变量的get方法
public U getValue2()
{
return this.value2;
}
}
//主类
public class Sample35_1
{
public static void main(String args[])
{
//创建自己定义泛型类的对象。并指定两个类型变量
MyValue<String,Integer> mv1=new MyValue<String,Integer>();
//调用set方法对成员变量进行设置
mv1.setValue("你好该參数为字符串类型",new Integer(100));
//返回第一个成员变量的值
String str=mv1.getValue1();
//返回第二个成员变量的值
Integer num=mv1.getValue2();
//将两个值进行打印
System.out.println("mv1对象的第一个參数值为:"+str+" 第二个參数值为:"+num+"。");
//创建还有一个自己定义泛型类的对象。并另外指定两个类型变量
MyValue<Integer,String> mv2=new MyValue<Integer,String>();
//调用set方法对成员变量进行设置
mv2.setValue(new Integer(100),"你好该參数为字符串类型");
//返回第一个成员变量的值
num=mv2.getValue1();
//返回第二个成员变量的值
str=mv2.getValue2();
//将两个值进行打印
System.out.println("mv2对象的第一个參数值为:"+num+" 第二个參数值为:"+str+"。 ");
}
}
</span>上述实例中自己定义了一个泛型类MyValue,有两个类型參数T与U,而且成员变量也都是由类型參数在指定。接下来在创建泛型类MyValue的对象时。为类型变量指定了明白的类型值。
3.泛型方法
在Java中也支持泛型方法,而且比泛型类更加的灵活。
public static <类型变量> 返回类型 方法名(參数列表){}
<span style="font-family:SimSun;font-size:18px;">package com.fanxing; public class Sample35_2
{ public <T> void PrintTest(T t1){
System.out.println(t1);
} //自己定义的泛型方法
public static <T> T getLast(T[] a)
{ //返回指定类型数组的最后一个元素
return a[a.length-1];
}
public static void main(String args[])
{
//创建字符串类型的数组
String[] str={"这里是第一个元素","这里是第二个元素","这里是第三个元素"};
//使用泛型方法。并为其指定类型參数
String laststr=Sample35_2.<String>getLast(str);
//打印结果
System.out.println("String数组str的最后一个元素为:“"+laststr+"”。 ");
//创建Integer类型数组
Integer[] num={new Integer(100),new Integer(200),new Integer(300)};
//使用泛型方法,但并没有显式指定类型參数
Integer lastnum=Sample35_2.getLast(num); Sample35_2 a=new Sample35_2();
a.PrintTest("你好吗");
//打印结果
System.out.println("Integer数组num的最后一个元素为:“"+lastnum+"”。 ");
}
}
</span>上述就是泛型方法的使用。一般泛型方法以静态方法居多。
4.类型变量的限制
假设想对类型变量进行限制的话。这时就须要使用类型变量的限制。详细语法例如以下
类型变量 extends 限定类型序列
限定类型序列,能够是类、接口等,多个限制之间通过&隔开
<span style="font-family:SimSun;font-size:18px;">package com.fanxing; import java.io.*;
//定义泛型类,并对类型參数进行限定
class MyValue1<T extends Number&Comparable&Serializable>
{
//定义由类型參数指定类型的成员变量
private T value;
//成员变量的set方法
public void setValue(T newValue)
{
this.value=newValue;
}
//成员变量的get方法
public T getValue()
{
return this.value;
}
}
//主类
public class Sample35_3
{
public static void main(String args[])
{
//创建类型參数指定为Integer的MyValue对象
MyValue1<Integer> mv=new MyValue1<Integer>();
//设置mv中的值
mv.setValue(new Integer(200));
//获取mv中的值
Integer num=mv.getValue();
//打印该值
System.out.println("mv对象中的值为:"+num
+"该值既属于Number类又实现了Comparable与Serializable。 ");
}
}
</span>上述实例就是对类型变量进行了限定。限定为Number而且可序列化
Java学习笔记九(泛型)的更多相关文章
- 【原】Java学习笔记027 - 泛型
package cn.temptation.test; import java.util.ArrayList; import java.util.Iterator; public class Samp ...
- 【Java学习笔记】泛型
泛型: jdk1.5出现的安全机制 好处: 1.将运行时期的问题ClassCastException转到了编译时期. 2.避免了强制转换的麻烦. <>: 什么时候用? 当操作的引用数据类型 ...
- java学习笔记之泛型
"泛型"这个术语的意思就是:"使用与许多许多的类型".泛型在编程语言中出现时,其最初的目的是希望类或方法能够具备最广泛的表达能力.如何做到这一点呢,正是通过解耦 ...
- Java学习笔记九:Java的循环跳转语句
Java的循环跳转语句 一:Java循环跳转语句之break: 生活中,我们经常会因为某些原因中断既定的任务安排.如在参加 10000 米长跑时,才跑了 500 米就由于体力不支,需要退出比赛.在 J ...
- Java学习笔记九
GUI:图形用户界面,Java不常用于创建桌面应用,所以用的比较少 一.概述: 二.Frame演示: 三.事件监听机制 import java.awt.Button; import java.awt. ...
- Java学习笔记(九)面向对象---模板方法设计模式
理解 在定义功能时功能的一部分是确定的,但是有一部分是不确定的,而确定的部分在使用不确定的部分,那么就将不确定的部分暴露出去,由该类的子类完成. 举例 需求 获取一段程序的运行时间 代码 abstra ...
- Java学习笔记4
Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...
- Java学习笔记【一、环境搭建】
今天把java的学习重新拾起来,一方面是因为公司的项目需要用到大数据方面的东西,需要用java做语言 另一方面是原先使用的C#公司也在慢慢替换为java,为了以后路宽一些吧,技多不压身 此次的学习目标 ...
- 《Java学习笔记(第8版)》学习指导
<Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...
随机推荐
- c++ ptrdiff_t 类型
ptrdiff_t是C/C++标准库中定义的一个与机器相关的数据类型.ptrdiff_t类型变量通常用来保存两个指针减法操作的结果.ptrdiff_t定义在stddef.h(cstddef)这个文件内 ...
- HTML::Entities 编码或解码 HTML 实体的字符串
<pre name="code" class="html"><pre name="code" class="py ...
- IT第十一天、第十二天、第十三天 - 数组的应用、飞行棋游戏的编写和总结
NIIT第十一天 上午 多维数组 1.数组是引用数据类型 排序 1.冒泡排序法 2.类冒泡排序法 下午 飞行棋游戏 1.项目策划 2.项目规则确认 3.项目模块确认 晚上 1.飞行棋游戏,项目框架的编 ...
- Erich Gamma
Erich Gamma是IBM的杰出工程师.他是Jazz项目的领头人之一,曾担任Eclipse的Java开发环境JDT项目的领导,目前是Eclipse的项目管理委员会成员.Erich也是经典书籍< ...
- ceph增加osd流程
假如需要新增一个主机名:osd4 ip:192.168.0.110的OSD1.在osd4创建挂载目录及放置配置文件的目录 ssh 192.168.0.110 (这里是从mon主机ssh到osd4主机) ...
- 如何用 new 来动态开辟一个二维数组
一般的做法是: int **p = new int*[m]; //m行n列型 for (i = 0; i < m; ++i) { p[i] = new int[n]; for (j = 0; j ...
- 设计模式 ( 十五 ) 中介者模式Mediator(对象行为型)
设计模式 ( 十五 ) 中介者模式Mediator(对象行为型) 1.概述 在面向对象的软件设计与开发过程中,根据“单一职责原则”,我们应该尽量将对象细化,使其只负责或呈现单一的职责,即将行为分布到各 ...
- 非确定有限状态自动机的构建(二)——将CharVal转换为NFA
保留版权,转载注明出处:潘军彪的个人博客(http://blog.csdn.net/panjunbiao/article/details/9378933) 将上下文无关文法读入内存之后,可以将它转换成 ...
- Can't connect to MySQL server on 'XXX' (13)
出现can't connect to MySQL server using '' (13)的错误,结果是 SELinux 不让 httpd 访问外网,一开始还以为是iptables造成的,关闭之后发现 ...
- 09-UIKit(UICollectionViewController、UITabBarController)
目录: 一.UICollectionViewController 二.UITabBarController(标签控制器) 三.视图和试图控制器的生命周期 四.其他控件 回到顶部 一.UICollect ...