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.如果你既想存,又想取,那就别用通配符。
    }
}
时间: 2024-08-08 00:50:54

Java泛型代码例子的相关文章

从一段java泛型代码发现java编译器的缺陷

最近在写java代码的时候,需要进行对象转换,由于字段名存在不同,BeanUtils无法满足需求,所以想到了java世界有没有类似C#的AutoMapper库,找到了 ModelMapper 以官方的Getting Started为例 源对象 // Assume getters and setters on each class class Order { Customer customer; Address billingAddress; } class Customer { Name nam

java泛型小例子01

1 class info<T> { 2 private T name; 3 4 info(T name){ 5 this.name = name; 6 } 7 } 8 9 class hello{ 10 11 public static void function(info<?> temp){ 12 System.out.println("内容: "+temp); 13 } 14 15 public static void main(String[] args)

java 泛型上下限的例子

public static void doGenericExtends(List<? extends Goods> list) { Goods goods = new Goods(); GoodsChild goodsChild = new GoodsChild(); GoodsParent goodsParent = new GoodsParent(); // list.add(goods); compile error // list.add(goodsChild); compile er

java泛型边界深入探讨,示例代码

package org.rui.generics.bounds; import java.awt.Color; /** * 边界 * 下面展示了边界基本要素. * @author lenovo * */ interface HasColor{java.awt.Color getColor();} class Colored<T extends HasColor> { T item; Colored(T item){this.item=item;} T getItem(){return item

java swing高仿酷我音乐界面代码例子下载

原文:java swing高仿酷我音乐界面代码例子下载 代码下载地址:http://www.zuidaima.com/share/1550463245044736.htm 高仿酷我音乐界面尽情欣赏 java swing高仿酷我音乐界面代码例子下载,布布扣,bubuko.com

Java泛型解析(03):虚拟机执行泛型代码

Java泛型解析(03):虚拟机执行泛型代码 Java虚拟机是不存在泛型类型对象的,所有的对象都属于普通类,甚至在泛型实现的早起版本中,可以将使用泛型的程序编译为在1.0虚拟机上能够运行的class文件,这个向后兼容性后期被抛弃了,所以后来如果用Sun公司的编译器编译的泛型代码,是不能运行在Java5.0之前的虚拟机的,这样就导致了一些实际生产的问题,如一些遗留代码如何跟新的系统进行衔接,要弄明白这个问题,需要先了解一下虚拟机是怎么执行泛型代码的. 虚拟机的一种机制:擦除类型参数,并将其替换成特

java swing颜色选择器代码例子下载

原文:java swing颜色选择器代码例子下载 源代码下载地址:http://www.zuidaima.com/share/1550463730420736.htm 矿泉水2013-09-13 17:17:13 java swing颜色选择器代码例子下载

JAVA泛型详解——转

泛型(Generic type 或者generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类.可以把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方法的形式参数是运行时传递的值的占位符一样. 可以在集合框架(Collection framework)中看到泛型的动机.例如,Map类允许您向一个Map添加任意类的对象,即使最常见的情况是在给定映射(map)中保存某个特定类型(比如String)的对象. 因为Map.get()被定义为返回Object

2017.4.5 Java 泛型

Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型. 泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数. 假定我们有这样一个需求:写一个排序方法,能够对整形数组.字符串数组甚至其他任何类型的数组进行排序,该如何实现? 答案是可以使用 Java 泛型. 使用 Java 泛型的概念,我们可以写一个泛型方法来对一个对象数组排序.然后,调用该泛型方法来对整型数组.浮点数数组.字符串数组等进行排