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 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...
随机推荐
- Qt mac QMYSQL(动态加载插件QPluginLoader的用法)
用此段代码查出问题所在 QPluginLoader loader; loader.setFileName("/Users/danny/Qt5.3.2/5.3/clang_64/plugins ...
- QT学习 之 QwtPlot(数学绘图)
QT对于统计图像.函数图像等的绘制是没有相关组件的帮助的,只有利用手工绘制图片. QwtPlot是用来绘制二维图像的widget,继承自QFrame 和 QwtPlotDict.不过严格的说来,它只是 ...
- 【Cavali风格/优质羊毛混纺面料/高密抗静电里衬/撞色拼皮/立领/绿色/便装单西】玛萨玛索男装网购商城
[Cavali风格/优质羊毛混纺面料/高密抗静电里衬/撞色拼皮/立领/绿色/便装单西]玛萨玛索男装网购商城 Cavali风格/优质羊毛混纺面料/高密抗静电里衬/撞色拼皮/立领/绿色/便装单西
- if语句求三个数中最大的
Console.WriteLine("请输入第一个数:"); int a = Convert.ToInt32( Console.ReadLine()); Console.Write ...
- ThinkPHP - 空模块+空操作
空操作 空操作是指系统在找不到指定的操作方法的时候,会定位到空操作(_empty)方法来执行,利用这个机制,我们可以实现错误页面和一些URL的优化. 例如,下面我们用空操作功能来实现一个城市切换的功能 ...
- 【Eclipse】报错提示删掉@Override
是因为项目的JRE System Library版本不对,点击Edit进入Edit Library 界面,因为项目默认是使用Eclipse自带的jdk版本(Workspace default JRE) ...
- Latex(一)公式自动编号与自动引用
在进行latex引用时,有两种办法: 一,被动引用. 如有这样一段代码: $$ x^2+y^2= z^2.\eqno(1.1) $$ In this paper, we investigated (1 ...
- BZOJ 3282: Tree( LCT )
LCT.. -------------------------------------------------------------------------------- #include<c ...
- Struts 2 OGNL
1.什么是OGNL? 2.Struts 2 OGNL 表达式 ====================== 华丽丽的分割线 ====================== 1.什么是OG ...
- hadoop安全模式
hadoop安全模式在分布式文件系统启动的时候,开始的时候会有安全模式,当分布式文件系统处于安全模式的情况下,文件系统中的内容不允许修改也不允许删除,直到安全模式结束.安全模式主要是为了系统启动的 ...