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();
		}
	}
}

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

时间: 2024-10-10 15:45:25

java基础入门-泛型(1)的相关文章

java基础之泛型用法

1.什么是泛型 泛型是java中保障类型安全的一种机制.它通过对变量类型的假设,实现变量类型的进行限制,从而在一定程度上保证程序编译时变量类型的安全.反之,如果没有泛型,这些假设则只存在于程序员的大脑中,这样会导致类型转换的异常在程序运行时才被发现. //不用泛型 List list1 = new ArrayList(); list1.add(1); Object o = list1.get(0); //返回Object类型对象 Integer i = (Integer) o; //需预先知道类

Java基础:泛型

Java的泛型是什么呢, 就是类型的参数化,这得类型包括方法参数和返回值,也就是原本该是确定类型的地方换成了变量,把类型的确定时间向后延迟了. 在之前,学过"重载"的概念,重载是什么呢,举例来说 public class Test{ // 处理整型数据 void receive(int i) { System.out.println("Received one int data"); System.out.println("i="+i); } /

Java基础巩固----泛型

注:参考书籍:Java语言程序设计.本篇文章为读书笔记,供大家参考学习使用   1.使用泛型的主要优点是能够在编译时而不是在运行时检查出错误,提高了代码的安全性和可读性,同时也提高了代码的复用性. 1.1如何理解泛型的使用提高了代码的安全性? 答:例如这样一段代码: ArrayList<Date> arrayList = new ArrayList<Date>(); arrayList.add(new Date()); arrayList.add("data")

java基础之泛型的继承

关于泛型的基本介绍和理解请参考以下几篇文章,或查询更多资料: 泛?型?与?泛?型?继?承 泛型(包括泛型抽象类的继承) 泛型的继承测试 本篇以简单的List<>方式来进行说明. ArrayList<Object>继承了List<Object>, ArrayList<String>没有继承List<Object> List<?>等价于List<? extends Object> 请参考以下代码: /** * author D

Java基础入门 传智播客pdf

下载地址:网盘下载 内容简介 <Java基础入门>从初学者的角度详细讲解了Java开发中重点用到的多种技术.全书共11章,包括Java开发环境的搭建及其运行机制.基本语法.面向对象的思想,采用典型翔实的例子.通俗易懂的语言阐述面向对象中的抽象概念.在多线程.常用API.集合.IO.GUI.网络编程章节中,通过剖析案例.分析代码结构含义.解决常见问题等方式,帮助初学者培养良好的编程习惯.最后,讲解了Eclipse开发工具,帮助初学者熟悉开发工具的使用.  <Java基础入门>附有配套

Java基础入门 目录:

本系列博文内容主要是自己日常工作学习中常见.注意.以及还需要巩固的内容,有些本人熟练掌握的内容不在该博文内,也不能当作查询技术的"海词"使用,主要用于学习并记录成长!!! Java开发入门 Java编程基础 Java API

Java 基础入门

Java基础 JVM.JDK.JRE三者的关系: JDK:(Java Develop Kit)主要是针对开发人员使用的,是整个java的核心.它包括了Java运行环境(JRE),Java工具( javac/java/jdb等 )和Java基础类库. JRE:(Java Runtime Environment)是运行java程序必须的环境的集合.它包括了JVM标准实现和Java核心类库. JVM:(Java Virtual Machine)java虚拟机,java本身不跨平台,java跨平台是依靠

JAVA基础入门通关检测

一.JAVA基础知识点问答(1.2.3章) 1. JDK1.6.0_06软件的安装.(请安装在 C:\Java 目录下) 2. JAVA的开发环境如何配置?(即:JAVA_HOME . Path . CLASSPATH 的配置) 3. 开发一个JAVA应用程序的步骤是?(如下程序) public class FirstSample { public static void main(String[] args ) { System.out.print ("欢迎你们来北京,来到"); S

Java基础:泛型详解

泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用.什么是泛型?为什么要使用泛型? 泛型,即“参数化类型”.一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参.那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参).泛型的本质是为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型).也