Java 集合枚举泛型(二)

来源:互联网 发布:mac铁锈红是什么色 编辑:程序博客网 时间:2024/05/19 19:13

本文出自:http://blog.csdn.net/dt235201314/article/details/70228260

欢迎Star(updating):https://github.com/JinBoy23520/CoderToDeveloperByTCLer

一丶慨述

集合枚举泛型续

二丶正文

泛型

Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。

泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)

例:  ArrayList<String> al=new ArrayList<String>();

<String> 及泛型,作用:ArrayList al 里只能存入Srting类型

直接上Demo

/** * <pre> *     author : JinBiao *     CSDN : http://my.csdn.net/DT235201314 *     time   : 2017/04/16 *     desc   : 泛型演示 *     总结   ; 1.Class<T>在实例化的时候,T要替换成具体类 *                Class<?>它是个通配泛型,?可以代表任何类型 *              2.<? extends T>受限统配,表示T的一个未知子类。 *                <? super T>下限统配,表示T的一个未知父类。 *              3.泛型体现java反射,获取类方法 属性信息 *              4.便于代码的复用,减少代码量 *     version: 1.0 * </pre> */public class Generics {    /**     * @param args     */    public static void main(String[] args) {        // TODO Auto-generated method stub        ArrayList<Dog> al = new ArrayList<Dog>();   // al 的类型就与 Dog绑定了        //创建一只狗        Dog dog1 = new Dog();        //放入到集合中        al.add(dog1);        // Dog temp=(Dog)al.get(0);        // Cat temp=(Cat)al.get(0);        // Dog temp=al.get(0);   //取al里中的第一个元素 不用强制类型转换        Gen<Bird> gen1 = new Gen<Bird>(new Bird());        gen1.showTypeName();        getData(al);    }    public static void getData(ArrayList<?> data) {        System.out.println("data :" + data.get(0));    }}//定义一个个Birdclass Bird {    public void test1() {        System.out.println("aa");    }    public void count(int a, int b) {        System.out.println(a + b);    }}//定义一个类class Gen<T> {    private T o;    // 得到T的类型和名称    public Gen(T a) {        o = a;    }    public void showTypeName() {        System.out.println("类型是:" + o.getClass().getName());        //通过反射机制可以得到T类型的很多信息(比如说得到成员函数名)        Method[] m = o.getClass().getDeclaredMethods();        //  打印        for (int i = 0; i < m.length; i++) {            System.out.println(m[i].getName());        }    }}class Cat {    private String color;    private int age;    public String getColor() {        return color;    }    public void setColor(String color) {        this.color = color;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }}class Dog {    private String name;    private int age;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }}    /**     * 输出     类型是:javademo.generics.Bird     count     test1     data :javademo.generics.Dog@7d4991ad    */
拓展学习:

Java中反射机制(Reflection)学习:http://blog.csdn.net/developer_jiangqq/article/details/7342632

http://www.cnblogs.com/lzq198754/p/5780331.html


这里写了个关于集合泛型枚举的小Demo

演示效果:


设计思路:猫狗继承动物,ArrayList<? super Animal>存数数据,类属性颜色用枚举l类表示:

CollectionEnumgGnericsActivity.Java

public class CollectionEnumgGnericsActivity extends Activity implements View.OnClickListener {    private Button button, button1 , button2;    private TextView textView;    private ArrayList<? super Animal> arrayList;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_collection_enumg_gnerics);        button= (Button) findViewById(R.id.button);        button1 = (Button) findViewById(R.id.button1);        button2 = (Button) findViewById(R.id.button2);        textView = (TextView) findViewById(R.id.text);        arrayList = new ArrayList<>();        button.setOnClickListener(this);        button1.setOnClickListener(this);        button2.setOnClickListener(this);    }    public void button(){        Dog dog = new Dog("多多","2", Color.green.toString());        arrayList.add(dog);        setText();    }    public void button1(){        Cat cat = new Cat("喵喵","3", Color.blue.toString());        arrayList.add(cat);        setText();    }    public void button2(){        arrayList.clear();        textView.setText("");    }    public void setText(){        textView.setText("");        String string = "";        for(int i=0;i <  arrayList.size();i++){            Animal animal = (Animal) arrayList.get(i);            String text = "姓名" + animal.getName() + "   年龄" +  animal.getAge() + "  颜色"  + animal.getColor() + "\n";            string += text ;        }        textView.setText(string);    }    @Override    public void onClick(View v) {        switch (v.getId()) {            case R.id.button:                button();                break;            case R.id.button1:                button1();                break;            case R.id.button2:                button2();                break;        }    }}

整理先到这里,漏洞再补充,谢谢收看,欢迎点赞关注!




4 0
原创粉丝点击