四、Java高级--1、泛型

  • 泛型
    定义:数据类型参数化,提前定义好集合中放入什么类型
    集合框架中没使用泛型和使用泛型的比较
  • 泛型规则和限制
    1、泛型的参数类型只能是引用类型,而不是简单类型,比如<int>是不可使用的
    2、可以声明多个泛型参数类型,比如<T、Q、P...>,同时还可以嵌套泛型,如list<<String>>
    3、泛型的参数类型可以使用extends语句,例如<T extends superclass>
    4、泛型的参数类型可以使用super语句,例如<T super childclass>
    5、泛型还可以使用通配符,例如<? extends ArrayListi>


    结构
/*
默认的list,此时创建一个mylist,里面的数据类型都可以放,不限制
*/
package javastudy;

import java.util.LinkedList;
import java.util.List;

public class Test1 {

   public static void main(String[] args) {
       // TODO Auto-generated method stub
       List myList=new LinkedList();
       myList.add(100);
       int x=(int)myList.get(0); //强制转换,将对象转换为int类型
       System.out.println(x);
   }
}

执行结果

使用泛型,其数据类型只能是integer

package javastudy;

import java.util.LinkedList;
import java.util.List;
public class Test1 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        List<Integer> myList=new LinkedList<Integer>(); //只允许int类型
        myList.add(200);
        int x=myList.get(0);
        System.out.println(x);
    }
}
执行结果
  • 自定义一个泛型
package javastudy;

import java.util.LinkedList;
import java.util.List;
public class Test1 {

    public static void main(String[] args) {
        MyTest<String> mt=new MyTest<String>();
        mt.setVar("jack");
        mt.print();
    }
}
class MyTest<T>{  //<>是一个类型,但具体类型没有确定
    T vare ;
    void setVar(T vare){
        this.vare=vare;
    }
    T getVar(){
        return vare;
    }
    void print(){
        System.out.println(vare);
    }
}
执行结果

*定义一个类,将泛型类型定义为类

package javastudy;

import java.util.LinkedList;
import java.util.List;
public class Test1 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        MyTest<Person> mt=new MyTest<Person>();//泛型类型定义为一个类
        Person p=new Person("Mark", 25);
        mt.setVar(p);  //泛型类型定义为一个类
        mt.print();
    }
}
class MyTest<T>{  //<>是一个类型,但具体类型没有确定
    T vare ;
    void setVar(T vare){
        this.vare=vare;
    }
    T getVar(){
        return vare;
    }
    void print(){
        System.out.println(vare);
    }
}
class Person{
    @Override
    public String toString() { //重写toString方法,调用print的person时,使用toString
        // TODO Auto-generated method stub
        return "姓名:"+name+",年龄:"+age;
    }
    String name;
    int age;
    Person(String name,int age){
        this.name=name;
        this.age=age;
        }
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Scala与Java的关系 Scala与Java的关系是非常紧密的!! 因为Scala是基于Java虚拟机,也就是...
    灯火gg阅读 3,482评论 1 24
  • Java 泛型是 Java 5 引入的一个重要特性,相信大多数 Java 开发者都对此不陌生,但是泛型背后的实现原...
    JohnnyShieh阅读 2,085评论 6 37
  • 参数类型的好处 在 Java 引入泛型之前,泛型程序设计是用继承实现的。ArrayList 类只维护一个 Obje...
    杰哥长得帅阅读 905评论 0 3
  • 这篇文章发表在我的个人博客上,为了更好的阅读体验,请戳这里:jmyblog > 首先声明:这并不是一篇教程。 这不...
    谁把钱丢了阅读 2,509评论 1 10
  • 上半生,活脱脱一个取宠争荣的历程。哗得对象好像都是领导权贵长辈师长异性和生命中遇到的可以给你点儿什么的人。 你叫它...
    山友阅读 202评论 0 0