您当前的位置: 首页 >  Java

wespten

暂无认证

  • 1浏览

    0关注

    899博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

java泛型的使用

wespten 发布时间:2018-11-14 19:01:07 ,浏览量:1

java泛型的使用

泛型的产生机制就是放什么类型的数据进去,取出来的就是什么类型,而不用进行类型转换

泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。

泛型是在编译阶段有效

Java 泛型只在编译阶段有效,即在编译过程中,程序会正确的检验泛型结果。而编译成功后,class 文件是不包含任何泛型信息的

使用泛型可以指代任意对象类型;

泛型类

public class CC{
 
    private T ob;
 
     
    public CC(T ob) {
        super();
        this.ob = ob;
    }
 
    public T getOb() {
        return ob;
    }
 
    public void setOb(T ob) {
        this.ob = ob;
    }
     
    /**
     * 打印T的类型
     */
    public void print(){
        System.out.println("T的实际类型是:"+ob.getClass().getName());
    }
     
}

 

        // begin test CC
        CC cc=new CC(1);
        cc.print();
        int icc=cc.getOb();
        System.out.println("i3="+icc);
         
        CC cc2=new CC("我是泛型,好简单啊");
        cc2.print();
        String icc2=cc2.getOb();
        System.out.println("s2="+icc2);
        // end test CC

 

泛型方法

public class Box {
    private T box;
    public T getBox(T t){
        this.box = t;
        return t;
    }
    public void getType(){
        System.out.println("T的实际类型为:"+box.getClass().getName());
    }
     
    public static void main(String[] args) {
        Box box = new Box();
        System.out.println(box.getBox(1));
        box.getType();
         
        System.out.println(box.getBox("Tom"));
        box.getType();
    }
 
}
T的实际类型为:java.lang.Integer
Tom
T的实际类型为:java.lang.String

 

返回值为任意类型的泛型

	public static  void f(T t){
		System.out.println("T的类型是:"+t.getClass().getName());
	}
	
	public static void main(String[] args) {
		f("");
		f(1);
		f(1.0f);
		f(new Object());
	}

泛型通配符

在泛型中,我们可以用 ? 来代替任意类型

public List wildCard(List list){
     
    return list;
}
 
public static void main(String[] args) {
    GenericTest gt = new GenericTest();
    //构造一个 Interger 类型的集合
    List integer = new ArrayList();
    integer.add(1);
    System.out.println(gt.wildCard(integer));
    //构造一个 String 类型的集合
    List str = new ArrayList();
    gt.wildCard(str);
    //构造一个 Object 类型的集合
    List obj = new ArrayList();
    obj.add(1);
    obj.add("a");
    System.out.println(gt.wildCard(obj));
    //构造一个 任意类型的 集合,这和 List 存放数据没啥区别
    List list = new ArrayList();
    gt.wildCard(list);
     
}
	private static void take(Demo a){
		a.print();
	}
	
	public static void main(String[] args) {
		Demo demo=new Demo(new Dog());
		take(demo);
		
		Demo demo2=new Demo(new Cat());
		take(demo2);
	}

泛型的上限和下限

①、上限: 语法(? extends className),即只能为 className 或 className 的子类

//通配符的下限,只能是 Number 或 Number的子类
    public List wildCard(List            
关注
打赏
1665965058
查看更多评论
0.0439s