码迷,mamicode.com
首页 > 编程语言 > 详细

Java泛型代码例子

时间:2015-06-17 09:44:00      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:泛型   代码   java   

Java泛型代码例子

一篇代码胜过千言万语

package com.apkkids.javalanguage;

import java.util.ArrayList;
import java.util.List;

/**
 * @author wxb
 * Java泛型例子
 */
public class GenericTest {
    //泛型接口
    public interface MyCollection<T>{
        public T get(int position );
        public T add(T t);
    }
    //泛型接口继承
    public interface MyList<T> extends MyCollection<T>{}

    //泛型类
    public static class MyListImpl<T> implements MyList<T>{

        public T get(int position) {
            System.out.println("get value at position "+ position);
            return null;
        }

        public T add(T t) {
            System.out.println("add "+t.toString());
            return null;
        }
    }

    //要用到的一组类
    public static class Fruit{}
    public static class Apple extends Fruit{}
    public static class Strawberry extends Fruit{}
    public static class FujiApple extends Apple{}


    /**
     * @param args
     */
    public static void main(String[] args) {
        //实例化泛型类
        MyList<String> strlist = new MyListImpl<String>();
        strlist.add("test");
        strlist.get(0);

        //下面的代码说明:List<Apple>不是List<Fruit>的子类,用更通俗的话,泛型类型跟其是否子类型没有任何关系。
//      List<Apple> apples = new ArrayList<Apple>();
//      List<Fruit> fruits = apples;

        // 使用 ? extends 通配符,List<Apple>和List<Strawberry>的对象都可以赋值给List<? extends Fruit>
        List<Apple> apples = new ArrayList<Apple>();
        List<Strawberry> strawberrys = new ArrayList<Strawberry>();
        List<? extends Fruit> fruits = apples;
        fruits = strawberrys;

        //使用 ? super 通配符,List<Fruit>的对象可以赋值给List<? super Apple>
        List<Fruit> fruits2 = new ArrayList<Fruit>();
        List<? super Apple> apples2 = fruits2;

//      总结 ? extends 和 the ? super 通配符的特征,我们可以得出以下结论:
//      1.如果你想从一个数据类型里获取数据,使用 ? extends 通配符
        fruits.get(0);
        //下面三行都会编译报错
//      fruits.add(new Apple());
//      fruits.add(new Strawberry());
//      fruits.add(new Fruit());        

//      2.如果你想把对象写入一个数据结构里,使用 ? super 通配符
        apples2.add(new Apple());
        apples2.add(new FujiApple());
        Object o = apples2.get(0);  //取出时只能得到Obejct对象

//      3.如果你既想存,又想取,那就别用通配符。
    }
}

Java泛型代码例子

标签:泛型   代码   java   

原文地址:http://blog.csdn.net/logicteamleader/article/details/46523685

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!