zoukankan      html  css  js  c++  java
  • java基础入门-泛型(1)-为什么需要使用泛型?

    为什么需要使用泛型?

    1.代码复用

    2.保证类型安全

    3.编程的便利


    第一部分,先说说代码复用

    1)建立一个Animal的父类

    package com.ray.test;
    
    public class Animal {
    	private String name="Animal";
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    }
    

    2)建立连个Animal的子类Cat和Dog

    package com.ray.test;
    
    public class Cat extends Animal {
    	private String name="Cat";
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    }
    

    package com.ray.test;
    
    public class Dog extends Animal {
    	private String name="Dog";
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    }
    

    3)建立一个测试类

    使用泛型前:

    package com.ray.test;
    
    public class Test2 {
    
    	private Animal animal;
    	private Cat cat;
    	private Dog dog;
    
    	public Test2(Animal animal, Cat cat, Dog dog) {
    		this.animal = animal;
    		this.cat = cat;
    		this.dog = dog;
    	}
    
    	public Animal getAnimal() {
    		return animal;
    	}
    
    	public void setAnimal(Animal animal) {
    		this.animal = animal;
    	}
    
    	public Cat getCat() {
    		return cat;
    	}
    
    	public void setCat(Cat cat) {
    		this.cat = cat;
    	}
    
    	public Dog getDog() {
    		return dog;
    	}
    
    	public void setDog(Dog dog) {
    		this.dog = dog;
    	}
    
    	public static void main(String[] args) {
    		Test2 test2 = new Test2(new Animal(), new Cat(), new Dog());
    		System.out.println(test2.getAnimal().toString());
    		System.out.println(test2.getCat().toString());
    		System.out.println(test2.getDog().toString());
    	}
    }
    



    使用泛型后:


    package com.ray.test;
    
    public class Test<T> {
    
    	private T t;
    
    	public Test(T t) {
    		this.t = t;
    	}
    
    	public T getT() {
    		return t;
    	}
    
    	public void setT(T t) {
    		this.t = t;
    	}
    
    	public static void main(String[] args) {
    		Test<Animal> test = new Test<Animal>(new Animal());
    		Test<Cat> test2 = new Test<Cat>(new Cat());
    		Test<Dog> test3 = new Test<Dog>(new Dog());
    		System.out.println(test.getT().toString());
    		System.out.println(test2.getT().toString());
    		System.out.println(test3.getT().toString());
    	}
    }
    

    前后对比,代码简洁了不少,而且如果以后我不是使用Animal、Dog、Cat这些类,而是使用其他的类,我们也可以再次复用Test<T>这个类


    第二部分,我们说说类型安全

    没有使用泛型之前,list里面可以增加任何东西,下面就是其中一个例子,大家注意最后add的那个object,其实跟上面的那些完全不一样,但是没有报错

    这样为我们使用这个list带来巨大的不变,因为很容易手贱就加了一个不是原来想要的东西进去

    package com.ray.test;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class Test2 {
    	public static void main(String[] args) {
    		List list=new ArrayList();
    		list.add(new Animal());
    		list.add(new Dog());
    		list.add(new Cat());
    		list.add(new Test2());
    	}
    }
    

    使用泛型后,最后一个直接报错,这样对于代码在编译期间就可以识别出错误来,编程效率提高不少。


    package com.ray.test;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class Test2 {
    	public static void main(String[] args) {
    		List<Animal> list=new ArrayList();
    		list.add(new Animal());
    		list.add(new Dog());
    		list.add(new Cat());
    		//下面直接报错
    		list.add(new Test2());
    	}
    }
    

    第三部分,我们承接上面的代码继续说下去,泛型对于编程的便利

    因为确定了类型,我们使用这个list的时候,可以直接调用类型里面的方法,而且不需要强转,在1.4之前,是需要强转的


    package com.ray.test;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class Test2 {
    	public static void main(String[] args) {
    		List<Animal> list=new ArrayList();
    		list.add(new Animal());
    		list.add(new Dog());
    		list.add(new Cat());
    		
    		for (int i = 0; i < list.size(); i++) {
    			Animal animal = list.get(i);
    			animal.toString();
    		}
    	}
    }
    


    暂时泛型的第一节讲到这里,后面部分请继续关注



    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    Ubuntu18.04 一些好用的扩展
    Java并发编程:volatile关键字解析
    SpringCloud(0) 外行人都能看懂的SpringCloud,错过了血亏!
    Java8中的流操作-基本使用&性能测试
    JDBC基本操作
    单例模式(二)
    单例模式(一)static、final和单例模式
    Lombok的使用与原理
    Linux下出现permission denied的解决办法
    虚拟机安装
  • 原文地址:https://www.cnblogs.com/raylee2007/p/4774570.html
Copyright © 2011-2022 走看看