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学习笔记九(泛型)的更多相关文章

  1. 【原】Java学习笔记027 - 泛型

    package cn.temptation.test; import java.util.ArrayList; import java.util.Iterator; public class Samp ...

  2. 【Java学习笔记】泛型

    泛型: jdk1.5出现的安全机制 好处: 1.将运行时期的问题ClassCastException转到了编译时期. 2.避免了强制转换的麻烦. <>: 什么时候用? 当操作的引用数据类型 ...

  3. java学习笔记之泛型

    "泛型"这个术语的意思就是:"使用与许多许多的类型".泛型在编程语言中出现时,其最初的目的是希望类或方法能够具备最广泛的表达能力.如何做到这一点呢,正是通过解耦 ...

  4. Java学习笔记九:Java的循环跳转语句

    Java的循环跳转语句 一:Java循环跳转语句之break: 生活中,我们经常会因为某些原因中断既定的任务安排.如在参加 10000 米长跑时,才跑了 500 米就由于体力不支,需要退出比赛.在 J ...

  5. Java学习笔记九

    GUI:图形用户界面,Java不常用于创建桌面应用,所以用的比较少 一.概述: 二.Frame演示: 三.事件监听机制 import java.awt.Button; import java.awt. ...

  6. Java学习笔记(九)面向对象---模板方法设计模式

    理解 在定义功能时功能的一部分是确定的,但是有一部分是不确定的,而确定的部分在使用不确定的部分,那么就将不确定的部分暴露出去,由该类的子类完成. 举例 需求 获取一段程序的运行时间 代码 abstra ...

  7. Java学习笔记4

    Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...

  8. Java学习笔记【一、环境搭建】

    今天把java的学习重新拾起来,一方面是因为公司的项目需要用到大数据方面的东西,需要用java做语言 另一方面是原先使用的C#公司也在慢慢替换为java,为了以后路宽一些吧,技多不压身 此次的学习目标 ...

  9. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

随机推荐

  1. 基于visual Studio2013解决C语言竞赛题之0406数列求和

      题目 解决代码及点评 这个题目,还是考察for循环的使用 以及数列规律,该数列的特点是第n个分子 = 第n-1个分子 + 第n-2个分子,分母也是此规律 而另外一个规律是第n个分子和第n- ...

  2. unity3d大型手游 可以打包obb文件

    用unity3d开发手游,有个很大的问题就是apk的size太大, 如果超过50M,一般很多平台就不会肯上线. 一个好的方法是把app打成apk + obb数据包的方式. 1. 编译成obb数据包的方 ...

  3. codeblock快捷键

    一款开源的C/C++ IDE(集成开发环境),基于wxWidgets GUI体系,跨平台支持. 从别处粘贴的,方便以后看,啦啦啦…… 编辑器 快捷键 功能 Ctrl+Z 恢复上一次操作 Ctrl+Sh ...

  4. N皇后( DFS,推荐)

    N皇后问题 Description   在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上.          你的任 ...

  5. ulipad双击无反应

    所有的东西都配好后,执行ulipad需要注意的是: 1,必须以管理员身份运行ulipad. 2,当运行有道词典的时候,双击ulipad是没有反应, 至于为什么会出现这种情况,我也不太清除,等我查到 原 ...

  6. 观django-messages包笔记

    django_messages是一个提供注册用户之间互相发送消息的django app.最近在研究其实现机制,安装测试非常容易,导入包,配好url以及syncdb生成数据库即可使用. 一.收获一: 我 ...

  7. 在Struts 2中实现IoC

    IoC(Inversion of Control,以下译为控制反转)随着Java社区中轻量级容器(Lightweight Contianer)的推广而越来越为大家耳熟能详.在此,我不想再多费唇舌来解释 ...

  8. 安装Tomcat指定JDK(转)

    一.应用实例 一般情况下一台服务器只跑一个业务,那么就直接配置一套环境,设置好Java环境变量即可.某些时候一台服务器上会安装多个业务,而且各个业务需要的JDK版本各不相同,或者为了使业务独立开来,需 ...

  9. python爬虫实战2百度贴吧爬html

    转自:http://blog.csdn.net/wxg694175346/article/details/8927832 import string, urllib2 #定义百度函数 def baid ...

  10. 带符号的char类型取值范围为什么是-128——127

    以前经常看到带符号的char类型取值范围是-128——127,今天突然想为什么不是-127——127,-128是怎么来的? 127好理解,char类型是8位,最高位是符号位,0正1负,所以011111 ...