# 泛型

编译时候的安全检测机制,将参数泛化

如arryalist就使用了泛型的技术

在创建时候可以指定存储的类型

```
        ArrayList<Object> l = new ArrayList<>();
```

还可以指定返回的泛型，属性类型等，使用很广。

主要是用于编译时候检测，操作的类型是否一致

注意java的泛型是一种语法糖，不是真正的泛型，可以使用反射绕过泛型

```
    public static void main(String[] args) throws Exception {
        List<Integer> list = new ArrayList<>();
        list.add(1);
        Method add = list.getClass().getMethod("add", Object.class);
        add.invoke(list,"str");
        System.out.println(list);
        System.out.println(list.get(1));
    }
    print 
    [1, str]
    str
```
