语法糖(Syntactic Sugar),也称糖衣语法,指在计算机语言中添加的某种语法,这种语法对语言本身功能来说没有什么影响,只是为了方便程序员的开发,提高开发效率。说白了,语法糖就是对现有语法的一个封装。
语法糖在我们Android开发中经常遇到的我暂且归纳为以下几类:
1、 泛型
泛型我们平时会经常遇到,在写一些框架的时候是必不可少的元素。但是其一个实现机制很容易被我们忽视.
类型擦除
泛型这种语法糖,编译器会在编译期间「擦除」泛型语法并相应的做出一些类型转换动作。对于java虚拟机来说,他根本不认识Map<String, String> map这样的语法。需要在编译阶段通过类型擦除的方式进行解语法糖。
类型擦除的主要过程如下:
a、将所有的泛型参数用其最左边界(最顶级的父类型)类型替换。
b、移除所有的类型参数。
实例:
原代码
Map<String, String> map = new HashMap<String, String>();
map.put("name", "zhufk");
map.put("age", "28");
解语法糖之后
Map map = new HashMap();
map.put("name", "zhufk");
map.put("age", "28");
原代码
public static <A extends Comparable<A>> A max(Collection<A> xs) {
Iterator<A> xi = xs.iterator();
A w = xi.next();
while (xi.hasNext()) {
A x = xi.next();
if (w.compareTo(x) < 0)
w = x;
}
return w;
}
解语法糖之后
public static Comparable max(Collection xs){
Iterator xi = xs.iterator();
Comparable w = (Comparable)xi.next();
while(xi.hasNext())
{
Comparable x = (Comparable)xi.next();
if(w.compareTo(x) < 0)
w = x;
}
return w;
}
总结:虚拟机中没有泛型,只有普通类和普通方法,所有泛型类的类型参数在编译时都会被擦除,泛型类并没有自己独有的Class类对象。比如并不存在List<String>.class或是List<