一个 int 类型的数字在不转型的前提下怎么放入 List<String>?

今天面试问到的,不能转型放入这个泛型是 String 的集合中。

回答·69
最热
最新
  • 我特码六年了,做 JAVA,都没得脑血栓,他这个脑血栓怎么得的
  • 首先需要知道的一点是,泛型只有在编译期才有效,运行的时候会擦除。 所以我们可以这样做,用反射 已知 List list,Int i。 Class.forName("java.util.ArrayList").getMethod("add",Object.class).invoke(list,i);
  • 这不就放进去了。。。
  • 不晓得这么做的意义是什么
  • 可以使用反射打破类型限制
  • List《String》 list = new ArrayList(); List temp = list; temp.add(1); 面试官问的应该是范型擦写的意思吧。
  • 放进去这个词是一个陷阱。不转型也是一个陷阱。假设,不转型指的是不能使用现有的一些方法。比如+”” 、new String()等。那个这个问题我理解就是,输入是一个 int,输出是一个 List。可以考虑从两个方向入手,第一个是编译时,第二个是运行时。编译时,可以考虑修改编译器。也可以修改字节码等方式。运行时,比如采用自定义的序列化方式。其他可以再扩展。希望对你有所帮助。
  • 能问出这种问题的不是天才,就是神经
  • 首先需要知道的一点是,泛型只有在编译期才有效,运行的时候会擦除。 所以我们可以这样做,用反射 已知 List list,Int i。 Class.forName(“java.util.ArrayList”).getMethod(“add”,Object.class).invoke(list,i);
  • 关键点:泛型擦写,编译时约束,取巧骗过(越过)编译检查即可。