Java泛型/泛型限定

一、泛型概述:

  1.来源:1.5jdk出现的新特性;用于解决安全问题,是一个安全机制;

    //下面代码,编译不报错,运行报错,加上泛型给与集合类型限定;

  2.好处:减少运行时的问题,在编译时体现;避免强制转换的麻烦;

  3.关键字:<数据类型>

public class Test {
    public static void main(String[] args) {
        ArrayList arrayList = new ArrayList();
        arrayList.add("1");
        arrayList.add(1);

        for (Iterator iterator = arrayList.iterator(); iterator.hasNext(); ) {
            String next = (String) iterator.next();
        }
    }
}

二、泛型用法:

  1)泛型类:class 类名<T>

class Base<T> {
    private T t;

    public T getT() {
        return t;
    }

    public void setT(T t) {
        this.t = t;
    }
}
public class Test {
    public static void main(String[] args) {
        Base<String> s = new Base<String>();
        s.setT("s");
        System.out.println(s.getT());
    }
}

  2)泛型方法:修饰符 <T> 返回值类型 方法名(T t){};

class Demo {
    public <T> void show(T t){
        System.out.println(t);
    }
}
public class Test {
    public static void main(String[] args) {
        Demo demo = new Demo();
        demo.show("string");
        demo.show(123);
    }
}

  3)静态泛型方法:

    //普通方法可以访问类上定义的泛型,但是静态方法不行,静态方法只能自己定义;

    //格式;修饰符 static <T> 返回值类型 方法名(T t){}; <T>千万不能放在static前头;

  4)泛型接口:interface 接口名<T>

interface Inter<T>{
    void show(T t);
}
class InterImpl implements Inter<String> {
    @Override
    public void show(String s) {
        System.out.println(s);
    }
}
public class Test {
    public static void main(String[] args) {
        InterImpl inter = new InterImpl();
        inter.show("s");
    }
}

三、泛型限定:

  1、通配符:?;也可以理解为占位符;

  2、用法:

    1  extends E上限;可以接收E类型或者E的子类型;

    2  super E下限;可以接收E类型或者E的父类型;

三、示例:

import java.util.*;

class Person{

private String name;

public Person(String name) {this.name = name;}

public String getName() { return name;}

}

class Student extends Person{

public Student(String name) {super(name); }

}

public class Test {

public static void main(String[] args) {

ArrayList<Person> al1=new ArrayList<Person>();

al1.add(new Person("张三"));

al1.add(new Person("李四"));

al1.add(new Person("王五"));

ArrayList<Student> al2=new ArrayList<Student>();

al2.add(new Student("刘一"));

al2.add(new Student("刘二"));

al2.add(new Student("刘三"));

printAll(al1);

printAll(al2);

}

public static void printAll(ArrayList<? extends Person> al){

Iterator<? extends Person> it=al.iterator();

while (it.hasNext()){

System.out.println(it.next().getName());

}}}

原文地址:https://www.cnblogs.com/Tractors/p/11247664.html

时间: 2024-11-07 01:07:10

Java泛型/泛型限定的相关文章

Java 中 泛型的限定

泛型 一般 出现在集合中,迭代器中 也会出现! 泛型 是为了 提高代码的 安全性. 泛型 确保数据类型的唯一性. 在我们常用的容器中,  越是 单一 约好处理啊! 泛型的限定: ? 是通配符 指代 任意类型 泛型的限定上限: <? extends E> 接受 E 或者 E 的子类型. 泛型的限定下限: <?  super   E>  接收  E 或者 E 的父类. 泛型的限定上限 (定义父类 填装子类 类型!) 代码: package stu.love.v; import java

Java核心 --- 泛型

CoreJava 泛型 java泛型的出现避免了强制类型转换,便于代码更好的被阅读 本文的写作参照了张孝祥的泛型介绍:http://www.itcast.cn/news/dbfd20f1/f4b1/412d/9b40/c1a81b8bf1da.shtml 更多疑问请参考:http://www.vaikan.com/java-generics-quick-tutorial/ 1.可以接收类型参数的类型在接受类型参数后变为泛型,但是,虽然是不同的泛型但是还是相同的类型 package com.yuk

java之 ------ 泛型【从基础到加强】

泛型 基础篇 一.为什么要泛型 1.原因 先看一个集合的例子(至于集合,前面有讲解,集合详解链接,不懂得可以先去看看那篇) import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.Iterator; import cn.hncu.bean.Person; public class CollectionDemo { public static void m

Java的泛型机制

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.ios培训..Net培训</a>.期待与您交流!------/*Java的泛型机制 概念:泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类.简单的说,就是对要操作的对象指定数据类型,其用法和形参类似. 如:class D

十:Java之泛型

[定义] 一.泛型的定义主要有以下两种: 在程序编码中一些包含类型参数的类型,也就是说泛型的参数只可以代表类,不能代表个别对象.(这是当今较常见的定义) 在程序编码中一些包含参数的类.其参数可以代表类或对象等等.(现在人们大多把这称作模板) 不论使用那个定义,泛型的参数在真正使用泛型时都必须作出指明. 泛型类,是在实例化类的时候指明泛型的具体类型: 泛型方法,是在调用方法的时候指明泛型的具体类型. 二.使用泛型的目的: 一些强类型程序语言支持泛型,其主要目的是加强类型安全及减少类转换的次数,但一

Java基础——泛型

转http://www.cnblogs.com/1693977889zz/p/7095460.html 一.定义 泛型(generic)是指参数化类型的能力.可以定义带泛型类型的类或方法,随后编译器会用具体的类型来替换它(泛型实例化). 使用泛型的主要优点是能够在编译时,而不是在运行时检测出错误. 它是jdk1.5之后出现的特性,为了增强安全性.我的理解是,它更像一种特殊规范,比如程序员在调用的时候,或者客户端在引入的时候,总不能鱼龙混杂,想怎样就怎样啊?!前面定义说输入一个String型的,这

Java 5 泛型深入研究

Java 5泛型深入研究 上接<Java 泛型的理解与等价实现>,这个仅仅是泛型的入门.有博友反映泛型很复杂,难以掌握.鉴于此,写一片续集. 实际上泛型可以用得很复杂,复杂到编写代码的人员自己也难以看懂.这往往是对泛型的滥用或者类或接口本身设计不合理导致的. 看来用好泛型还真不容易,为此必须从根源说起. 一.逐渐深入泛型 1.没有任何重构的原始代码: 有两个类如下,要构造两个类的对象,并打印出各自的成员x. public class StringFoo { private String x;

Java的泛型

1,泛型技术 因为容器可以存储多种类型的对象,而在取出时,需要用到对象的特有内容时需要做向下转型,但是对象的类型不一致,会导致ClassCassException异常;为了运行时期不出现类型异常,可以在定义容器时,就明确容器中的元素类型,在向容器存储对象时就进行检查,一旦不一致编译就报错.是一项运行在编译时期的安全机制 注意结合多态且不能和多态弄混 2,泛型容器特点: - 提高了程序的安全性 - 将运行期遇到的问题转移到了编译期 - 省去了类型强转的麻烦 - 泛型类的出现优化了程序设计例程 3,

Java中泛型的协变

在工作中遇到一个问题,用代码描述如下: package test; import java.util.LinkedList; import java.util.List; public class ListTest {     public void func(List<Base> list) {     }     public static void main(String args[]) {         ListTest lt = new ListTest();         Li

Java 容器 &amp; 泛型:六、容器讲到为什么要使用泛型

Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket ArrayList是集合类中无处不在的,泛型也是,泛型对集合类尤其有用.但是为啥要使用泛型?理解好了这个问题可以帮助理解相关的更多知识点.下面泥瓦匠以最简单的例子来验证这个问题. 一.泛型 泛型的目的是为了可以让更多不同类型的对象重用.没错,这样理解就太low.真正目的是为了在编译时找到bug,而不是在运行时.(编译时,指的是源代码翻译成机器识别的代码的时候.运行时,是指代码在机器中运行的时候.)泛