美文网首页
Java泛型(1)--使用泛型

Java泛型(1)--使用泛型

作者: Kylin824 | 来源:发表于2017-12-04 15:38 被阅读0次

泛型:解决Java集合无法记住元素数据类型,取出元素需要强制转换的缺点

使用泛型:

List<String> strLists = new ArrayList<String>();
Map<String, List<String>> m = new HashMap<String, List<String>>();

Java7之后可以省略构造器后的泛型信息 --“菱形语法”

List<String> strLists = new ArrayList<>();
Map<String, List<String>> m = new HashMap<>();

可以为任何类、接口增加泛型声明

Java中为List接口添加的泛型声明

public interface List<E>
{
  //E作为类型时使用
  void add(E x);
  Iterator<E> iterator();//调用此iterator()方法返回Iterator<E>类型
  ...
}
public interface Iterator<E>
{
  E next();//返回E类型的元素
  Boolean hasNext();
  ...
}
public interface Map<K, V>
{
  //K,V作为类型使用
  Set<K> keySet();//调用此keySet()方法返回Set<K>类型
  V put(K key, V value)
  ...
}

为自定义类添加泛型声明

public class Apple<T> {
    private T info;//泛型类型静态变量
    private int test;//普通类型静态变量

    public Apple(T info) {//构造器名与原来相同 而不是Apple<T> 但调用构造器要用Apple<T>,T可省略
        this.info = info;
    }

    public T getInfo() {            //泛型构造器、set与get方法,以传入的T为类型
        return info;
    }

    public void setInfo(T info) {
        this.info = info;
    }
  
                           public Apple(int p){
                               this.test = p;
                           }

                           public int getTest() {   //普通构造器、set与get方法
                               return test;
                           }

                           public void setTest(int test) {
                               this.test = test;
                           }

    public static void main(String[] Args){
        //以泛型为参数
        Apple<String> a1 = new Apple<>("apple");
        System.out.println(a1.getInfo());
        //普通形式
        Apple a2 = new Apple(123);
        System.out.println(a2.getTest());
    }
}

从泛型类派生子类 -- 创建子类继承上面的Apple泛型类

public class A extends Apple<T>  //错误,父类不能再包含类型型参
public class A extends Apple<String>  //正确 
public class A extends Apple  //正确 不传入实际的类型参数,编译器会发出警告,但可通过编译

不存在泛型类

List<String> l1 = new ArrayList<>();
List<Integer> l2 = new ArrayList<>();//不管类型参数时什么,都被当作同一个类处理
System.out.println(l1.getClass()==l2.getClass());//结果为true

String是Object的子类,String可当作Object对象处理

List<String>不是List<Object>的子类,List<String>不能当作List<Object>对象处理

方法传入集合做形参,因为集合的元素类型不确定,因此用类型通配符<?>,将元素全部认为时Object类型

public static void test(List<?> c){
    for (int i=0; i<c.size();i++)
    {
        System.out.println(c.get(i));
    }
}

通配符的上限可设定

泛型提供了被限制的泛型通配符

相关文章

  • java 泛型解析

    Java 泛型 1、泛型的精髓是什么 2、泛型方法如何使用 概述: 泛型在java中具有重要地位,在面向对象编程模...

  • Android 开发也要掌握的Java知识 - Java泛型

    如果需要看泛型擦除Java泛型擦除 1.Java泛型有什么用?为啥要使用泛型? Java中数组的类型是定义的时候就...

  • 泛型(一)

    1. Java中的泛型是什么 ? 使用泛型的好处是什么? 泛型是Java SE 1.5的新特性,泛型的本质是参数化...

  • 赢在面试之Java泛型篇

    1、Java中的泛型是什么 ? 使用泛型的好处是什么? 泛型是Java SE 1.5的新特性,泛型的本质是参数化类...

  • 唬人的Java泛型并不难

    泛型 上面的代码有什么区别? 泛型初探 1、为何引入泛型? Java 泛型也是一种语法糖,使用泛型可以在代码编译阶...

  • Android 开发也要掌握的Java知识 - Java 泛型擦

    如果需要看泛型使用Java泛型 1.什么是泛型擦除 因为Java 泛型是1.5版本才引入的,为了向下兼容,其实虚拟...

  • Java泛型教程

    Java泛型教程导航 Java 泛型概述 Java泛型环境设置 Java泛型通用类 Java泛型类型参数命名约定 ...

  • Java泛型-你可能需要知道这些

    本博文为Java泛型扫盲文,争取读完后能理解泛型并使用泛型。 1. 几个知识点 1.1 什么是泛型 泛型的本质是参...

  • Java泛型(黑马程序员武汉中心)

    Java泛型 一、概述 1、泛型含义 2、泛型好处 3、泛型分类 二、常见的泛型案例 1、泛型方法 A.定义时 B...

  • Java泛型面试题

    1.Java中的泛型是什么 ? 使用泛型的好处是什么?以及各个版本有何区别? 答:泛型是 Java SE 1.5 ...

网友评论

      本文标题:Java泛型(1)--使用泛型

      本文链接:https://www.haomeiwen.com/subject/mqsxixtx.html