zoukankan      html  css  js  c++  java
  • 【java】泛型的作用是在编译阶段防止错误输入,绕过编译就绕过泛型,可用反射验证

     1 package com.tn.collect;
     2 
     3 import java.lang.reflect.Method;
     4 import java.util.ArrayList;
     5 
     6 public class Fanxin {
     7     public static void main(String[] args){
     8         //泛型的作用是在编译阶段防止错误输入,绕过编译就绕过了泛型
     9         //反射都是绕过编译操作
    10         ArrayList<String> str=new ArrayList<String>();
    11         str.add("你好!");
    12         ArrayList str2=new ArrayList();
    13         
    14         //结果是true说明类类型是一样的,编译后是去泛型化的
    15         System.out.println(str.getClass()==str2.getClass());
    16         System.out.println(str.getClass()==ArrayList.class);
    17         
    18         //用add方法的反射
    19         try{
    20             Method method=str.getClass().getMethod("add", new Class[]{Object.class});
    21             method.invoke(str, new Object[]{100});
    22         }catch(Exception e){
    23             e.printStackTrace();
    24         }
    25         
    26         System.out.println(str.size());
    27         System.out.println(str);
    28         
    29         for(String s:str){
    30             System.out.println(s);
    31         }
    32     }
    33 }
    View Code

    运行结果:

    true
    true
    2
    [你好!, 100]
    你好!
    Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
    at com.tn.collect.Fanxin.main(Fanxin.java:29)

  • 相关阅读:
    Python 元类
    Rsync 基础配置
    linux shell find
    找最大的目录
    云主机的上下行带宽
    关于c3p0 ResourcePoolException: Attempted to use a closed or broken resource pool
    recover_file
    MegaCli 监控raid状态
    influxdb
    在Ubuntu 16.04如何安装Java使用apt-get的
  • 原文地址:https://www.cnblogs.com/xiongjiawei/p/6602380.html
Copyright © 2011-2022 走看看