Java从入门到入土03(记录向)


萌新真的是被泛型折磨的够呛
这都是啥啊…

泛型

泛型提供了参数化类型,即在定义类、接口、方法时使用一个不确定的类型进行定义,在实现时最终被具体的类型替换

泛型传入的类型必须是引用类型

泛型在一定程度上提供在编译时检查类型的安全性,避免通用类Object进行强转带来的类型不合法问题。

eg:

public class Student<T> {	//T即为泛型,可以被任意引用类型替换
	private T age;	//可以是Integer、String...

	public T getAge(){
		return age;
	}
}

泛型数组

泛型无法直接构建数组( new T[5] ),需要使用的时候可以通过Object类与强制类型转换达到数组的效果。

public class GenericArray<T> {
    private Object[] array;
    private int pos;	//数组指针

    public GenericArray(int len) {
        array = new Object[len];
        pos = 0;
    }

    public void put(T val) {
        if (pos < array.length) {
            array[pos++] = val;
        }
    }

    public T get() {
        if (pos >= 0 && pos <= array.length) {
            return (T)array[--pos];		//需要强制类型转换
        } else {
            return null;
        }
    }

    public void set(int index, T val) {	
    //这里val不要用Object,否则合法类型过多,无法保证类型一致性
		if (index >= 0 && index <= array.length) {
			array[index] = val;
		}
    }

    public static void main(String[] args) {
        GenericArray<Integer> ga = new GenericArray<>(5);

        ga.put(11);
        System.out.println(ga.get());
    }
}

泛型接口

一个普通类实现泛型接口

interface Builder<T> {
    T doSomething();
}
public class GenBuilder implements Builder<String>{	
	//这里直接确定T的类型为String(当然也可以是T,这样在return时就需要另外处理)
    private int num = 0;

    public String doSomething() {
        return "String " + num++;
    }

    public static void main(String[] args) {
        GenBuilder gb = new GenBuilder();
        for(int i = 0; i < 3; i++){
            System.out.println(gb.doSomething());
        }
    }
}

to be continue…
后面的有缘(学会了)再更新

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值