不解释,上代码:
List list1=new ArrayList();
A a=new A();
list1.add(a);
List list=list1; 这样写你觉得会报错么?哈,不会!
可这又挨着我sxgkwei毛事呢?
好吧,我来说说情况。我当前做的项目是用的hibernate,然后查询的时候拼条件是利用DetachedCriteria来拼的,那new DetachedCriteria(A.class)然后你用这个去查,查出来的集合内对象自然全部是A,可是有个哥哥/弟弟在给上层提供出的DAO层方法返回上居然写的List,以前一直用着居然没错,因为他们拿到集合后就利用个工具类直接转JSON的丢到web端用JS处理去了,恰巧的是他们用到的A中的属性在B中也正好有,所以他们也一直是对的。
今天我要用了,我就一直以为它是B,好,我给B加了一个属性(A中没有此属性),好吧死活搞死我,在web端的JS中就是没有这个属性,我R啊,查来查去找不到问题所在,而且就是我这个属性拿不到数据,其它显示的属性都正常的朝我淫笑,我无语。最后一行一行的看,从前台看到后台,终于发现new DetachedCriteria(A.class),立刻叫到:MD,这明明是A对象啊,谁在坑老子。可惜的是,项目收尾阶段了,辞职的辞职,转其它项目的转其它项目,整个项目组只剩下我一个了。
好吧,说了这么多,最后可能你还是要说,这是那个提供DAO层方法的杀千刀的问题,和java有毛关系?
可我要说,尼玛的java你就允许这么赋值啊?当初就给他们报错让他们过不了,今天有这么多事儿么?