本文共 1964 字,大约阅读时间需要 6 分钟。
/** * 笔记 * 一、泛型 * 1.泛型的本质是参数的类型化,即所操作的数据类型被指定为一个参数, * 这种参数类型可以用在类,接口和方法的创建中。分别称为泛型类,泛型接口,泛型方法。 * 2.java引入泛型的好处是安全简单,在编译的时候检查类型安全,并且所有的强制类型转换都是自动和隐式的,提高代码的重用率。 * (1)类型安全 * (2)向后兼容 * (3)层次清晰 * (4)性能较高 * 3.在没有泛型时,听过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显示的强制类型转换, * 而这种转换是要求开发者对实际参数类型可以预知的情况下进行的, * 对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才会出现异常,这是一个安全隐患。*/
package com.shuiyixin1;import java.util.*;import java.lang.reflect.*;public class learnJ_006fanxing { /** * @作者:shuiyixin * @日期:2018.02.14 * @内容:泛型 * */ public static void main(String[] args) { // TODO Auto-generated method stub //ArrayList al = new ArrayList(); //Dog006 dog1 = new Dog006("xiaohua",5); //al.add(dog1); //取出,下面这句话会出现安全隐患。 //Dog006 temp = (Dog006)al.get(0); //例如在下面新建一个:并且在编写的时候不会提示错误,但是在编译的时候会有类型转换异常:ClassCastException //Cat006 temp = (Cat006)al.get(0); //解决这个问题的方式是使用泛型 //Java的反射机制 Gengen1 = new Gen ("111"); gen1.showTypeName(); Gen gen2 = new Gen (1); gen2.showTypeName(); Gen gen3 = new Gen (new Bird()); gen3.showTypeName(); }}//定义一个鸟类class Bird { public void test1(){ System.out.println("aaa"); } public void test2(int a,int b){ System.out.println(a + b); }}//定义一个类,其中T是一种类型class Gen { private T o; //得到T 的类型名称 public void showTypeName(){ //通过反射机制,我们可以得到该类的很多信息,如成员函数名。 System.out.println("类型是 : " + o.getClass().getName()); Method []m = o.getClass().getDeclaredMethods(); for (int i = 0; i < m.length; i++) { System.out.println(m[i].getName()); } } //构造函数 public Gen(T a){ o = a; }}class Cat006{ private String name; private int age; Cat006(String name,int age){ this.name = name; this.age = age; } void outInfo(){ System.out.println("猫的名字是 :" + name); System.out.println(" 年龄是 :" + age); } }class Dog006{ private String name; private int age; Dog006(String name,int age){ this.name = name; this.age = age; } void outInfo(){ System.out.println("狗的名字是 :" + name); System.out.println(" 年龄是 :" + age); } }
转载地址:http://cyyni.baihongyu.com/