Java泛型

Java泛型

在没有泛型的时候,集合中可以放入任意对象:

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

public class Test {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("xxx");
        list.add(123);
    }
}

在取出时,必须进行类型强转:

String s = (String) list.get(0);
int i = (int) list.get(1);

有了泛型之后,取出时不用进行强转:

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

public class Test {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("xxx");
        String s = list.get(0);
    }
}

泛型只在编译期有效:

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

public class Test {
    public static void main(String []args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException {

        List<Integer> list = new ArrayList<>();
        list.add(111);
        list.add(222);

        Class c = list.getClass();
        Method m = c.getMethod("add", Object.class);
        m.invoke(list,"Hello");
        
        System.out.println(list);
    }
}
  • 一个List集合插入两个Integer类型
  • 运行时通过反射再插入一个String类型
  • 没有报错,说明在运行时泛型不再起作用

泛型使用方法:

  • 泛型类和接口
  • 泛型方法

泛型类:

public class Test {
    public static void main(String[] args) {
        Test2<String> test2 = new Test2<>();
        test2.field = "xxx";
        System.out.println(test2.field);
    }
}

class Test2<T> {
    T field;
}

泛型方法:

public class Test {
    public static void main(String[] args) {
        System.out.println(method("xxx"));
    }

    static <T> T method(T var) {
        return var;
    }
}

使用泛型限定子类型:

public class Test {
    public static void main(String[] args) {
        method(new Test2());
        method(new Test3()); // 非Test的子类型,会报错
    }

    static <T extends Test> T method(T var) {
        return var;
    }
}

class Test2 extends Test {

}

class Test3 {
    
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值