java泛型温习

一些关于泛型的例子(有的是借鉴别人的)

1.java泛型的本质:编译时有限制,运行时类型擦除

2.java泛型中没有继承关系即:

   Integer extends Number   成立

  <Integer> 继承<Number> 不成立

3.java泛型的上下边界

限定通配符的上边界

正确:Vertor<? extends Number> x=new Vector<Integer>();

错误:  Vector<? extends Number> y=new Vector<String>();

限定通配符的下边界

正确:Vector<? super Integer> x=new Vector<Number>();

错误:Vector<? super Integer> y=new Vector<Byte>();

public class Generic<T> {
    private T t;

    public void setT(T t) {
        this.t = t;

    }

    public T getT() {
        return t;
    }

    public void test1() {
        List list = new ArrayList();
        list.add(123456);
        list.add("llilamei");
        Integer integer = (Integer) list.get(0);
        String str = (String) list.get(1);
        System.out.println(integer + str);
    }

    //泛型练习1
    public void test2() {
        List<String> list = new ArrayList<String>();
        list.add("zhangsan");
        list.add("lisi");
        System.out.println(list.get(0) + "  " + list.get(1));
    }

    //String练习
    public void test3() {
        String a = "123";
        doTest(a);
        System.out.println(a.equals("123"));
    }

    public void doTest(String str) {
        str = str + "123";
    }

    //泛型练习2(反射)
    public void test4() throws Exception {
        Constructor<String> consStr = String.class.getConstructor(StringBuilder.class);
        String str = consStr.newInstance(new StringBuilder("zhangsan"));
        System.out.println("zhangsan".equals(str));

    }

    //泛型练习4
    public void test5() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        List<Integer> list = new ArrayList<Integer>();
        @SuppressWarnings("rawtypes")
        Class<List> listClass = List.class;
        Method method = listClass.getMethod("add", Object.class);
        method.invoke(list, "zhangsan");
//        list.get(0).equals("zhangsan");
    }

    //泛型练习5
    //交换数组下标
    public <T> void test6(T[] array, int left, int right) {
        T t = array[left];
        array[left] = array[right];
        array[right] = t;

    }

    //将一个数组中元素复制到另一个数组中
    public <T> void copy1(T[] src, T[] dest) {
        for (int i = 0; i < src.length; i++) {
            dest[i] = src[i];
        }
    }

    //将一个集合中的元素复制到一个数组中
    public <T> void copy2(List<T> list,T[] array){
        for(int i=0;i<list.size();i++){
            array[i]=list.get(i);
        }
    }

public class Main {

    public static void main(String[] args) throws Exception {
        Generic generic = new Generic();
        String[] arraystr = new String[]{"zhangsan", "lisi", "wanger", "lidalong"};
        Integer[] arrayint = new Integer[]{11, 32, 43, 21, 48, 0};
        Integer[] arraynew = new Integer[arrayint.length];
        List<Integer> list= Arrays.asList(arrayint);
        generic.test1();
        generic.test2();
        generic.test3();
        generic.test4();
        generic.test5();
        generic.test6(arraystr, 0, 2);
        generic.test6(arrayint, 2, 5);
        generic.copy1(arrayint, arraynew);
        for (int i : arraynew) {
            System.out.print(i + "  ");
        }
        generic.copy2(list,arraynew);
        for (int i : arraynew) {
            System.out.print(i + "  ");
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值