日期:2014-05-20 浏览次数:21067 次
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;
}