用泛型返回值干掉丑陋的强制转换

在看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();

 

posted @ 2018-11-01 22:57  桔子在路上  阅读(1025)  评论(0)    收藏  举报