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 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...
随机推荐
- Qt5制作鼠标悬停显示Hint的ToolTip
在日常生活中的使用的软件中,我们经常会遇到这样的情况. 我们在网页上,有些网页链接的文字(比如文章标题,知乎问题标题,百度的词条等)因为太长了,而显示不出来,但是鼠标悬停在上面的时候就可以显示出来. ...
- Sicily-1006
一. 题意 这道题就是考排列组合吧,再来就是比较一下字符的下标算一下两个ranking的距离.然后我总结了一个排列和一个组合的实现方法,这道题直接用的是stl 里面的next_permutation ...
- PHP中magic_quotes_gpc和 magic_quotes_runtime区别及其反斜线转义问题
php中关于反斜线转义: php中数据的魔法引用函数 magic_quotes_gpc 或 magic_quotes_runtime 设置为on时,当数据遇到 单引号' 和 双引号&quo ...
- Problem 2169 shadow
Problem 2169 shadow Accept: 141 Submit: 421 Time Limit: 1000 mSec Memory Limit : 32768 KB Pr ...
- 外设:K9F2G08 nandflash 底层读写、控制驱动程序,可随机读写
/****************************************************************************** Copyright (C), 2001- ...
- hdu 4784 Dinner Coming Soon
spfa+优先队列.刚开始只用的spfa,结果tle到死.然后听队友说要用到优先队列,想了想,对时间分层的话的确每一个结点都只进队列一次即可,因为只有大时间才能更新出小时间,然后就wa成shi了.按队 ...
- Python 迭代器、生成器、递归、正则表达式 (四)
一.迭代器&生成器 1.迭代器仅仅是一容器对象,它实现了迭代器协议.它有两个基本方法: 1)next 方法 返回容器的下一个元素 2)_iter_方法 返回迭代器自身.迭代器可以使用内建的it ...
- 面向对象程序设计-C++ Default constructor & Copy constructor& Destructor & Operator Overloading【第九次上课笔记】
先上笔记内容吧: 这次上课的内容有关 构造函数 析构函数 运算符重载 return * this 内容很细,大家好好回顾笔记再照应程序复习吧 :) #include <iostream> ...
- grid.Column INT 所对应的文本
grid.Column("RoleId", "角色名称", (p) => { var role = string.Empty; if (p.RoleId ...
- 基于visual Studio2013解决C语言竞赛题之0522和为素
题目