日期:2014-05-20 浏览次数:20848 次
public static void addParent() throws InterruptedException { Date insertTime = new Date(); Parent parent = new Parent(); parent.fullName = "新增家长"; parent.fullNamePinyin = "xin zeng jia zhang"; parent.save(); List<Long> parentIdFromDB = new ArrayList(); parentIdFromDB.add(parent.id); /* 判断出这个List中的元素是什么类型, 控制台打印的信息:^^^^^parentIdFromDB.id type:class java.lang.Long */ System.out.println("^^^^^parentIdFromDB.id type:" + (parentIdFromDB.get(0).getClass())); String str_insertTime = dateTimeTranslate(insertTime); searchIdFromSolr(str_insertTime, parentIdFromDB); //接着把这个List传到这个函数里面 } /* 问题其实出在这个方法的参数声明上,只要改成List<Long>就能解决问题了, 但是请老师不要说“既然问题都解决了,还问什么?”呵呵,其实我想知道为什么,请继续往下看好吗? */ public static void searchIdFromSolr(String insertTime, List idFromDB) throws InterruptedException { /* 这里我什么也没有干,就直接把拿到的List再一次打印出里面元素的类型。 控制台输出:@@@@@%%%idFromDB type:class java.lang.String。 没错,到这里开始我就傻了,我怀疑这里有泛型擦除在作祟,但就算是擦除,那也是变成Object类型啊, 怎么会是String呢???我也不太懂擦除,只是网上了解了一下... */ System.out.println("@@@@@%%%idFromDB type:" + idFromDB.get(0).getClass()); System.out.println("*************Begin To Sleep**************"); Thread.sleep(5000); System.out.println("*************Weak Up**************"); List<Long> idFromSolrSearch = SolrSearchUtils .getIdsFromSolrSearch(insertTime); /* 把这2个List都传入该函数 */ if (ListsCompare(idFromDB, idFromSolrSearch)) { renderJSON(new Result("测试通过!")); } else { renderJSON(new Result("测试adf不通过!")); } } public static boolean ListsCompare(List idFromDB, List idFromSolrSearch) { /* 控制台打印信息:is idFromDB.id instanceof Long:false */ for (int i = 0; i < idFromDB.size(); i++) { System.out.println("is idFromDB.id instanceof Long:" + (idFromDB.get(i) instanceof Long)); System.out.println(idFromDB.get(i)); } /* 控制台打印信息:is idFromSolrSearch.id instanceof Long:true 咦!?我就奇怪了如果是擦除的话,那为什么idFromSolrSearch没有被擦除啊,还是Long类型啊!? */ for (int i = 0; i < idFromSolrSearch.size(); i++) { System.out.println("is idFromSolrSearch.id instanceof Long:" + (idFromSolrSearch.get(i) instanceof Long)); System.out.println(idFromSolrSearch.get(i)); } System.out.println("idFromDB:" + idFromDB); System.out.println("idFromSolrSearch:" + idFromSolrSearch); // if (idFromDB.containsAll(idFromSolrSearch)) {// // containsAll方法有问题,暂时用别的方法 // renderJSON(new Result("一样的!")); // return true; // } else { // renderJSON(new Result("不一样的")); // return false; // } if (idFromDB.size() != idFromSolrSearch.size()) { return false; } for (int i = 0; i < idFromDB.size(); i++) { if (!idFromSolrSearch.contains(idFromDB.get(i))) { /*这里其实还要覆写equals方法才行,但这不是主题,请火眼晶晶的老师先别在意~*/ return false; } } return true; }