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. asp.net从客户端检测到有潜在危险的Request.Form 值

    asp.net开发中,经常遇到“从客户端检测到有潜在危险的Request.Form 值”错误提示,很多人给出的解决方案是: 1.web.config文档<system.web>后面加入这一 ...

  2. OI不得不知的那些数学定理

    Binomial theorem One can define\[{r \choose k}=\frac{r\,(r-1) \cdots (r-k+1)}{k!} =\frac{(r)_k}{k!}\ ...

  3. Android Texting(2)Testing Fundamentals 测试基础篇

    Testing Fundamentals The Android testing framework, an integral part of the development environment, ...

  4. Xcode的Architectures、Valid Architectures和Build Active Architecture Only属性

    Architectures 这代表,在这个项目里你想要Xcode编译的目标设备列表. Valid Architectures 还不是太明确这个设置的意图,但是一般来说是不需要更改的,和Architec ...

  5. Read and Write NSArray, NSDictionary and NSSet to a File

    查询地址:http://iosdevelopertips.com/data-file-management/read-and-write-nsarray-nsdictionary-and-nsset- ...

  6. zIndex属性在IE中无效

    在ie中他的子类的zindex就以父类为准: <!doctype html> <html> <head> <meta charset="utf-8& ...

  7. PHP学习笔记6-时间/日期

    时区/时间/日期 输出unix时间戳(从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数),用time() echo time();//unix时间戳 输出结果:143557475 ...

  8. 【 D3.js 入门系列 — 2.1 】 选择、插入、删除元素

    1. select 和 selectAll 的区别 在 D3 中,选择元素的函数有两个:select 和 selectAll,它们的使用非常重要.先说明一下它们的区别: select 是选择所有指定元 ...

  9. ZOJ 3211 Dream City DP 01背包 经典问题

    题目大意:JAVAMAN 到梦幻城市旅游见到了黄金树,黄金树上每天回结出金子.已经有n棵树,JAVAMAN要停留m天,每天只能砍掉一棵树,砍掉树后就能得到树上的黄金.给定n棵树上原有的黄金a[i]和每 ...

  10. Qt 操作 pdf 文件

    写了好久的东西,不小心按了下返回键就没了.CSDN居然没自动保存,坑爹啊 原本还有很多信息的,现在直入正题吧. QT没有内置PDF操作的功能(其实有一个,QPrinter,不过只能写不能读,基本是半残 ...