泛型的基本定义及使用

                                    泛型

1、 基本概念:

范例:

class Point<T>{//T的类型未知

T x;

T y;

Point(T x, T y){

this.x=x;

this.y=y;

}

public void getPoint(){

System.out.println("x="+x+",y="+y);

}

}

public class StaticClass{

  public static void main(String[] args){

Point<Integer> point=new Point<Integer>(1,2);//必须是包装类,不支持基本类型

point.getPoint();

}

}

使用后泛型之后,所有类中属性都是动态设置的,而所有使用反省标记的方法参数类型也都要发生变化。

说明:如果使用泛型类或接口,没有设置泛型具体类型,那么会出现编译时的警告,并且所有泛型或使用object表示。

从jdk1.7可以简化泛型声明:Point<Integer> point=new Point<Integer>(1,2)

等价于Point<Integer> point=new Point<>(1,2)

2、 通配符

?:匹配任意类型

?extends 类:设置泛型上限,可以在声明和方法参数上使用。

例:? extends:可以设置Number或者Number的子类(Integer,Double.......)

?super 类:设置泛型下限,方法参数上使用。

例:? extends String :只能设置String或者它的父类Object。

上限范例:

class Message<T extends Number>{

private T msg;

public void setMsg(T msg){

this.msg=msg;

}

public T getMsg(){

return msg;}}

public class TestDemo{

public static void main(String[] args){

Message<Integer> m=new Message<Integer>();

m.setMsg(100);

fun(m);

}

public static void fun(Message<? extends Number>temp){

System.out.println(temp.getMsg());

}

}

以上代码中,如果出现了非Number或其子类,则会出现语法错误。

下限范例:

class Message<T>{

private T msg;

public void setMsg(T msg){

this.msg=msg;

}

public T getMsg(){

return msg;}}

public class TestDemo{

public static void main(String[] args){

Message<Integer> m=new Message<Integer>();

m.setMsg(100);

fun(m);

}

public static void fun(Message<? extends String>temp){

System.out.println(temp.getMsg());

}

}

3、 泛型接口

interface Message<T>{

public void print(T t);

}

形式一:class MessageImp<T> implements Message<T>{

public void print(T t){

System.out.print(t);

}

}

public class TestDemo{

public static void main(String[] args){

Message<String> m=new MessageImp<String>();

m.print("Hello World");

}}

形式二:

class MessageImp implements Message<String>{

public void print(String t){

System.out.print(t);

}

}

public class TestDemo{

public static void main(String[] args){

Message<String> m=new MessageImp ();

m.print("Hello World");

}}

4、 泛型方法

定义:

范例:

public class TestDemo{

public static void main(String[] args){

String str=fun("Hello World");

System.out.println(str);

}

public static <T>T fun(T t){//T的参数类型由传入值决定

return t;

}

}

5、 总结

1、 泛型解决的是向下转型所带来的安全隐患,其核心的组成就是在声明类或接口的时候不设置参数或属性的类型。

2、 “?”可以接收任意泛型类型,只可取出,不能修改。

时间: 2024-08-28 13:13:29

泛型的基本定义及使用的相关文章

Lua程序设计 泛型for的定义

泛型for在循环过程内部保存了迭代器函数.实际上他保存着3个值:一个迭代器函数.一个恒定状态和一个控制变量. 泛型for的语法如下:   for <var-list> in <exp-list>  do   end  其中,<var-list>是一个或多个变量名的列表,以逗号分隔:<exp-list>是一个或多个表达式的列表,同样以逗号分隔.通常表达式列表只有一个元素,即一句迭代器工厂的调用.    for k, v in pairs(t) do print

泛型的上下限定义

class Info<T>{     private T var;     public T getVar(){         return var;     }     public void setVar(T var){         this.var=var;     }     public String toString(){         return this.var.toString();     } } public class GenericsDemo17 { pub

C#泛型List 的定义、作用、用法

定义:List类表示可通过索引访问的对象的强类型列表,提供用于对列表进行搜索.排序和操作的方法. 作用:泛型最常见的用途是泛型集合我们在创建列表类时,列表项的数据类型可能是int,string或其它类型,如果对列表类的处理方法相同,就没有必要事先指定数据类型,留待列表类实例化时再指定.相当于把数据类型当成参数,这样可以最大限度地重用代码,保护类型的安全以及提高性能. List的一般用法所属命名空间: System.Collections.Genericpublic class List:ILis

c# 泛型List的定义、作用、用法

定义:List<T>类表示可通过索引访问的对象的强类型列表,提供用于对列表进行搜索.排序和操作的方法. 作用: 泛型最常见的用途是泛型集合 我们在创建列表类时,列表项的数据类型可能是int,string或其它类型,如果对列表类的处理方法相同, 就没有必要事先指定数据类型,留待列表类实例化时再指定.相当于把数据类型当成参数,这样可以最 大限度地重用代码,保护类型的安全以及提高性能. List的一般用法 所属命名空间: System.Collections.Generic public class

泛型 T的定义&lt;2&gt;

因为最近重新看了泛型,又看了些反射,导致我对Object.T(以下代指泛型).?产生了疑惑. 我们先来试着理解一下Object类,学习Java的应该都知道Object是所有类的父类,注意:那么这就意味着它的范围非常广!首先记住这点,如果你的参数类型时Object,那么的参数类型将非常广! <Thinking in Java>中说很多原因促成了泛型的出现,最引人注目的一个原因就是为了创造容器类.这个要怎么来理解呢?我的理解是,可以抛开这个为了创造容器类这个,而是回到泛型的目的是限定某种类型上来.

泛型 T的定义

public <T> T getMapper(Class<T> type, SqlSession sqlSession) { MapperProxyFactory mapperProxyFactory = (MapperProxyFactory)this.knownMappers.get(type); if(mapperProxyFactory == null) { throw new BindingException("Type " + type + &quo

Java泛型:泛型的定义(类、接口、对象)、使用、继承

地址   http://blog.csdn.net/lirx_tech/article/details/51570138 1. 设计泛型的初衷: 1) 主要是为了解决Java容器无法记忆元素类型的问题: i. 由于Java设计之初并不知道会往容器中存放什么类型的元素,因此元素类型都设定为Object,这样就什么东西都能放了! ii. 但是这样设计有明显的缺点: a. 取出元素的时候必须进行强制类型转换(尽管集合在运行时里面元素的"运行时类型"不变,即元素的getClass返回的还是最初

泛型的理解

泛型:一直对这个概念都觉着迷糊,经过最近的阅读,自己有了一定的理解,现分享给大家.从字面的意思理解来看,泛型,泛就是模糊.暂不确定暂定的意思.本人这样理解为,使用泛型就是,定义的一个类型,类型暂不确定,给使用给一个占位符给代替,在使用的时候可以给确定其定义的类型.下面附上eg: public static PageList<T> ToPageList<T>(this IQueryable<T> source, int page, int size) { if (page

集合、增强for、泛型

Collection集合:Collection是层次结构中的根接口,存储的元素为对象,(也就是说只能存储引用数据类型,不能存储基础数据类型),具体可查询API.集合与数组的区别:1.集合只能存放引用数据类型,不能存放基本数据类型,存储基本类型,需要使用基本数据类型对应的包装数据类型:数组可以存放任意数据类型2.集合创建对象的时候,可以不定义指定长度,也可不指定内容:数组创建对象的时候必须指定长度或者元素.3.一个集合对象中可以存放多种数据类型,而数组中只能存放一种数据类型.4.集合的长度是可变的