一.泛型_泛型概述及好处 

   1).在定义集合时,我们是希望集合中只存储一种类型的引用,这时可以使用泛型:

      ArrayList<String> list = new ArrayList<>(); //JDK7以后可以这样写

      或者:

      ArrayList<String> list = new ArrayList<String>();//JDK7以前必须这样写

   2).泛型的好处:可以规定一个集合中只能存储什么一种固定的类型。当不小心存储其它类型时,编译器会编译错误。

      ArrayList<String> list = new ArrayList<>();

      list.add("abc");

      list.add(10);//编译错误

二.泛型_定义和使用含有泛型的类

package com.ahd.fanxing;

public class Father<K,V> {
    K k;
    V v;
    public K getK(){
        return k;
    }

public void setK(K k){
        this.k=k;
    }

public V getV() {
        return v;
    }

public void setV(V v) {
        this.v = v;
    }
}

 

 

  注意:

   1).<E>:表示定义了一个泛型,它表示一种类型,只有在使用这个类时,才定义这个类型。

   2).<E>:语法:可以大写、可以小写、可以一个字母,也可以是多个字母。

 

三.泛型_含有泛型的方法

public class MyList {
public <E> void show(E e1,E e2,E e3) {
System.out.println("show()...");
}
}

测试类:

public class Demo {
public static void main(String[] args) {
MyList myList = new MyList(); myList.<Integer>show(10,20,30); myList.<String>show("abc", "bbb", "ccc");
}
}

四.泛型_含有泛型的接口

   1).定义方法同泛型类一样:

public interface Animal<E> {
public void show(E e);
public E get();
}

 

泛型_泛型通配符

   1).? : 可以表示:具有任何泛型的集合对象

public class Demo {
public static void main(String[] args) {
ArrayList<Object> objList = new ArrayList<>();
ArrayList<Integer> intList = new ArrayList<>();
ArrayList<String> strList = new ArrayList<>(); /*fun1(objList);//OK的
fun1(strList);//错误
fun1(intList);//错误*/ fun2(objList);
fun2(strList);
fun2(intList); }
public static void fun1(ArrayList<Object> object) { }
//需求:定义一个方法,可以接收具有任何泛型的ArrayList对象
public static void fun2(ArrayList<?> object) { }
}

2).<? extends E>:表示可以接收:E及其E的子类泛型。设定了上限

     

class Person{}
class Student extends Person{}
class JavaStudent extends Student{}
class PHPStudent extends Student{} class Teacher extends Person{ } public class Demo {
public static void main(String[] args) {
ArrayList<Person> list1 = new ArrayList<>(); ArrayList<Student> list2 = new ArrayList<>();
ArrayList<JavaStudent> list3 = new ArrayList<>();
ArrayList<PHPStudent> list4 = new ArrayList<>(); ArrayList<Teacher> list5 = new ArrayList<>(); // fun(list1);//错误
fun(list2);
fun(list3);
fun(list4);
// fun(list5);//错误 } //需求:定义一个方法,可以接收具有Student及其子类泛型的ArrayList对象
public static void fun(ArrayList<? extends Student> list) { }
}

3).<? super E>:表示可以接收:E及其E的父类泛型。设定了下限

public class Demo {
public static void main(String[] args) {
ArrayList<Person> list1 = new ArrayList<>(); ArrayList<Student> list2 = new ArrayList<>();
ArrayList<JavaStudent> list3 = new ArrayList<>();
ArrayList<PHPStudent> list4 = new ArrayList<>(); ArrayList<Teacher> list5 = new ArrayList<>(); fun(list1);
fun(list2);
// fun(list3);//错误
// fun(list4);//错误
// fun(list5);//错误 } //需求:定义一个方法,可以接收具有Student及”父类“类泛型的ArrayList对象
public static void fun(ArrayList<? super Student> list) { }
}

-------------------------------------------------------------------------------

java_泛型2的更多相关文章

  1. java_泛型(构造器)部分实例

    package ming; import java.util.ArrayList; import java.util.Collection; import java.util.List; class ...

  2. java_泛型(2016-11-17)

    没有自己敲,这篇博客讲的不错,直接记录. 犯懒啊 重点关注 T,?以及擦除 Java总结篇系列:Java泛型:http://www.cnblogs.com/lwbqqyumidi/p/3837629. ...

  3. Java_泛型

    转自博客HappyCorn https://www.cnblogs.com/lwbqqyumidi/p/3837629.html 什么是泛型? 泛型,即“参数化类型”.一提到参数,最熟悉的就是定义方法 ...

  4. Java_泛型_01_T与?

    二.参考文档 1.JAVA泛型通配符T,E,K,V区别,T以及Class<T>,Class<?>的区别

  5. java_泛型,设置类型通配符的上限

    package ming; import java.util.ArrayList; import java.util.Collection; import java.util.List; class ...

  6. java_泛型 TreeSet 判断hashcode/length(升序排列)

    package ming; import java.util.ArrayList; import java.util.Collection; import java.util.Comparator; ...

  7. java_泛型(设置通配符下限)

    package ming; import java.util.ArrayList; import java.util.Collection; import java.util.List; /* * 返 ...

  8. java_类泛型承继方法

    package ming; class Apple3<T>{ private T info; public Apple3(){} public Apple3(T info){ this.i ...

  9. Java_集合与泛型

    Collection 集合,集合是java中提供的一种容器,可以用来存储多个数据.在前面的学习中,我们知道数据多了,可以使用数组存放或者使用ArrayList集合进行存放数据.那么,集合和数组既然都是 ...

随机推荐

  1. Round A - Kick Start 2019

    a.链接:https://codingcompetitions.withgoogle.com/kickstart/round/0000000000050e01/00000000000698d6 题意: ...

  2. JavaScript 获取完整当前域名

    <script> var dq_url = window.location.protocol+"//"+window.location.host;/*获取当前域名*/ ...

  3. SDL 开发实战(四): SDL 事件处理

    在前面学习SDL的例子运行时,我们发现我们的窗口只停留了几秒,但是如果设置更长时间显然也有其他的弊端. 那么有没有一种好的办法可以解决这个问题呢?例如:能不能让窗口一直显示,直到检测到用户用鼠标点击关 ...

  4. [Swift]LeetCode102. 二叉树的层次遍历 | Binary Tree Level Order Traversal

    Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...

  5. java热加载和热部署

    JAVA热部署和热加载 联系与区别 Java热部署与热加载的联系 1.不重启服务器编译/部署项目 2.基于Java的类加载器实现 区别 部署方式 热部署在服务器运行时重新部署项目 热加载在运行时重新加 ...

  6. dataframe去除null、NaN和空字符串

    去除null.NaN 去除 dataframe 中的 null . NaN 有方法 drop ,用 dataframe.na 找出带有 null. NaN 的行,用 drop 删除行: import ...

  7. 【Sqoop篇】----Sqoop从搭建到应用案例

    一.前述 今天开始讲解Sqoo的用法搭建和使用.Sqoop其实功能非常简单.主要用于在Hadoop(Hive)与传统的数据库(mysql.postgresql...)间进行数据的传递,可以将一个关系型 ...

  8. WebSocket(5)---多人聊天系统

    多人聊天系统 功能说明:多人聊天系统,主要功能点: 1.当你登陆成功后,可以看到所有在线用户(实际开发可以通过redis实现,我这边仅仅用map集合) 2.实现群聊功能,我发送消息,大家都可以看到. ...

  9. 使用ASP.NET MVC Web SignalR 构建单身聊天室(一)

    前言:本系列的头章,想要带大家一起学习Web SignalR,那它是什么呢?ASP .NET SignalR 是一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现实时通信.什么 ...

  10. ASP.NET MVC one view bind many model

    一.自定义视图模型 model.cs public class AorBvm { public List<Role> GetRole { get; set; } public List&l ...