用泛型返回值干掉丑陋的强制转换
在看ArrayList源码的时候发现一个很有趣的泛型用法,算是语法糖?
@SuppressWarnings("unchecked")
E elementData(int index) {
return (E) elementData[index];
}
比如一个通用缓存的data属性
public class Cache { private Object data;
public Object getData() { return data; } public void setData(Object data) { this.data = data; } }
用的时候一般是这么用:
ObjectA objectA = (ObjectA)CacheMap.getInstance().get("objectA").getData();
ObjectB objectB = (ObjectB)CacheMap.getInstance().get("objectB").getData();
那这个强制转换就很难看了
这时候可以做这样的转换
public class Cache { private Object data; @SuppressWarnings("unchecked") public <E> E getData() { return (E)data; } public void setData(Object data) { this.data = data; } }
其实还是进行了强转,但是使用过程中就看不到了。
ObjectA objectA = CacheMap.getInstance().get("objectA").getData();

浙公网安备 33010602011771号