打字猴:1.700446905e+09
1700446905 编写高质量代码:改善Java程序的151个建议 [:1700438165]
1700446906 编写高质量代码:改善Java程序的151个建议 第7章 泛型和反射
1700446907
1700446908 Don’t let complexity stop you.Be activists.Take on the big inequities.It will be one of the great experiences of your lives.
1700446909
1700446910 不要让这个世界的复杂性阻碍你的前进。要成为一个行动主义者,将解决人类的不平等视为己任。它将成为你生命中最重要的经历之一。
1700446911
1700446912 ——比尔·盖茨在哈佛大学的演讲
1700446913
1700446914 泛型可以减少强制类型的转换,可以规范集合的元素类型,还可以提高代码的安全性和可读性,正是因为有这些优点,自从Java引入泛型后,项目的编码规则上便多了一条:优先使用泛型。
1700446915
1700446916 反射可以“看透”程序的运行情况,可以让我们在运行期知晓一个类或实例的运行状况,可以动态地加载和调用,虽然有一定的性能忧患,但它带给我们的便利远远大于其性能缺陷。
1700446917
1700446918
1700446919
1700446920
1700446921 编写高质量代码:改善Java程序的151个建议 [:1700438166]
1700446922 编写高质量代码:改善Java程序的151个建议 建议93:Java的泛型是类型擦除的
1700446923
1700446924 Java泛型(Generic)的引入加强了参数类型的安全性,减少了类型的转换,它与C++中的模板(Templates)比较类似,但是有一点不同的是:Java的泛型在编译期有效,在运行期被删除,也就是说所有的泛型参数类型在编译后都会被清除掉,我们来看一个例子,代码如下:
1700446925
1700446926 public class Foo{
1700446927
1700446928 //arrayMethod接收数组参数,并进行重载
1700446929
1700446930 public void arrayMethod(String[]strArray){
1700446931
1700446932 }
1700446933
1700446934 public void arrayMethod(Integer[]intArray){
1700446935
1700446936 }
1700446937
1700446938 //listMethod接收泛型List参数,并进行重载
1700446939
1700446940 public void listMethod(List<String>stringList){
1700446941
1700446942 }
1700446943
1700446944 public void listMethod(List<Integer>intList){
1700446945
1700446946 }
1700446947
1700446948 }
1700446949
1700446950 程序很简单,编写了4个方法,arrayMethod方法接收String数组和Integer数组,这是一个典型的重载,listMethod接收元素类型为String和Integer的List变量。现在的问题是,这段程序是否能编译?如果不能,问题出在什么地方?
1700446951
1700446952 事实上,这段程序是无法编译的,编译时报错信息如下:
1700446953
1700446954 Method listMethod(List<Integer>)has the same erasure listMethod(List<E>)as
[ 上一页 ]  [ :1.700446905e+09 ]  [ 下一页 ]