“You can subtype a generic class or interface by extending or implementing it. The relationship between the type parameters of one class or interface and the type parameters of another are determined by the extends and implements clauses.”
http://docs.oracle.com/javase/tutorial/java/generics/inheritance.html
package com.liguoliang.core.dao; import java.util.List; import com.liguoliang.core.modle.Animal; public abstract class AbstractDAO <T extends Animal>{ protected T saveAnimal(T animal) { System.out.println("Save: " + animal.toString()); return animal; } protected abstract List<T> getList(); }
Sub class should follow the contract made by the super class: T extends Animal
Otherwise, got the Error: Bound mismatch: The type ** is not a valid substitute for the bounded parameter
package com.liguoliang.core.dao; import java.util.List; import com.liguoliang.core.modle.Dog; public class DogDAO<WhatEver extends Object> extends AbstractDAO<Dog> { public Dog saveDog(Dog dog) { return saveAnimal(dog); } @Override protected List<Dog> getList() { return null; } public WhatEver whatEver(WhatEver w) { return w; } }
今天写了段很挫的代码, 简单的来说就是这样:
public static void main(String[] args) { try { throwNewException(); } catch (Exception e) { System.out.println(e); System.out.println(e.getMessage()); } } private static void throwNewException() { Object test = null; // simulate the Spring injection Error. test.getClass(); throw new RuntimeException("UserName cannot be empty."); }
简直就是奇葩, 在做UnitTest时, 其中一个用例是throwNewException throw RuntimeException,
由于Spring注入失败, 导致抛出NullPointerException, 而后续代码依赖于RuntimeException的ErrorMesg, 一直拿不到ErrorMesg. 纠结半天, 原因如下:
1. 懒. 使用RuntimeException而不是创建对应的Exception类型;
2. 懒. 在Catch时, catch了Exception, 而且没有打印Exception, 也就是说, 拦截并隐藏了所有Exception!
3. 懒. Debug时懒得思考, 看到如下的输出:
java.lang.NullPointerException
null
就得出结论, Exception是Null的! WTF!! 然后就开始纠结是不是Spring的问题…
所以,
创建Exception类型, Capture具体Exception具体处理, 处理或是继续抛出Exception, 而不是隐藏,.
昨晚做梦, 梦见回到大学宿舍. 房间里弥漫着难闻又温馨的味道, 有人睡觉, 有人打游戏, 有人边看报纸边抠脚.
下午对面同事问我会不会打乒乓球, 说公司在组织乒乓球队, 他报名了. 我呆呆的站在那看着窗外蓝色的海, 还有漂着的船. 这让我想起来十年前睡在我下铺的老乡, 认真的问我要不要去听考研讲座.
十年前的今天, 父亲送我到济南做火车, 车门关上后, 我才意识到到火车的玻璃这样隔音, 我挥挥手, 没有考虑父亲还要赶回家, 我满心欢喜的期待着我所谓的未来, 这是我第一次离开山东. 那时候从济南始发往乌鲁木齐有一趟特快车T189, 从济南到乌鲁木齐, 大概需要50个小时, 天高皇帝远, 虽然是硬座, 但我还是觉得自己是在飞向未来.
我开始了最放肆而快乐的大学生活.
在没有季节的岛国, 我时常想起大学里的不同季节.
新大的夏天是湿乎乎带着水汽的, 我喜欢阳光下闪着水珠的草坪, 也喜欢坐在红湖树下喝啤酒, 当然, 我更喜欢坐在路边一边吃肉一边喝酒, 然后再提一个西瓜或是一块一个的哈密瓜回宿舍, 或者买一袋葡萄, 摘下来放在盆子里洗了拿手一把一把的嚼. 即使没有这些吃的喝的, 单单是凉爽的夜晚就足够令人向往.
03年的9月, 一场雪压倒了很多小树, 后来, 我认识了一个很好的朋友, 他曾幽幽的对我说, 他能记得起03年的第一场雪, 因为那天他降级了.
秋天很短, 但金黄的树叶实在是太让人销魂.
大一的秋天, 没有电脑, 没有网络, 也没有手机, 也是我们最安静最老实的一段时间, 那时候我们有盘伍佰的磁带, 我们经常坐在阳台上, 晒着太阳, 开着外面来往的人群, 而变是外面人群叽叽喳喳的声音, 混着小风, 吹进来, 我觉得我是浮在空气里的, 两手空空, 却一点烦恼都没有.
后来我的朋友借了磁带去听, 他说, 伍佰的歌很难听, 但听的多了, 越听越好听.
那时候我们经常要排队上网, 有一天, 外面雪下的很大, 网吧里人太多, 我们只好去机房. 我跟朋友站在地下室某个机房的后面, 一边等机器, 一边看前面人的屏幕, 那是我们第一次听到大学自习室. 听到”得亏哥们我还练过, 要不然还不被你整成肛裂啊“ 我们噗的笑了. btw, 那时候流行的是Flash动画.
乌鲁木齐的冬天又冷又长, 我们多数时间不是在网吧里就是在去网吧的路上.
五一前后的几天, 暖风吹进来, 窗外的杨树开始嗖嗖的抽芽, 只需要一周, 就密的看不透了.
那些时光, 是烙在心里的.
在之后的很多年里, 在很多个凄清冷寂的夜里, 我时常打开心房, 一点点的碎片, 像一盏灯, 温暖我的心.
很多温暖的瞬间, 我舍不得回忆, 有时候会幼稚的担心, 反复回忆同一件事情最终会导致忘却.
譬如第一次去值班室喝酒,
譬如在高数课上听黄段子忍不住笑出声来,
譬如一个偶尔的机会就遇到某个男人或女人, 然后成了好朋友, 最后又留在了心里.
譬如站在阳台上对着外面人喊, 那谁, 给我带个抓饭, 带鸡腿的!
譬如食堂大姐在打饭时关切的说, 小伙子, 你要吃点肉啊. 可心里却在嘀咕, 为什么没有肌肉只有鸡头鸡脖子,还都是带毛的.
很快大家毕业, 做鸟兽散, 各奔东西.
有些事越来越淡, 有些情却越来越浓.
11年圣诞节假期, 我回到新疆, 骚扰了很多人. 想静下来聊聊人生, 可大家见面往往都是慷慨激昂, 不醉不归. 一直喝到手抖, 在回上海的飞机上, 旁边的人问我去新疆做什么, 我幽怨的说喝酒.
又一个朋友马上就要结婚了, 我又换了一份工作.
立秋很多天了, 我试着安抚自己进入秋天模式.
记得高中时, 要很早起床跑早操, 天蒙蒙亮, 小秋风呼呼啦啦的刮着. 那时候我的语文老师经常念一句诗: “自古逢秋悲寂寥,我言秋日胜春朝”, 我不太能理解. 体育课上就顶着旁边杨树上所剩不多的几片树叶发呆, 眨眼一晃, 十多年过去了.
打劫.
我想说的, 是文明社会里的打劫.
譬如在地铁站口, 办信用卡的, 卖保险的, 做调查的, 拉捐款的, 他们会和善的涌上一脸笑容. 对于一个每天挤地铁上班的屌丝来说, 每天都要面对这帮人, 于是我学会了一些技巧, : 绕路走, 低头快走, 戴耳机装听不见的, 笑一笑说自己是游客, 实在被拉住了, 说句”不好意思”, 但有时还会有执着的人, 就比较扯蛋, 注定就要浪费彼此的时间.
但有时候, 还是被围追堵截, 死缠烂打. 今天中午一个长得比我帅的家伙非要给我介绍什么东西, “不要害怕, 我不是卖东西的, 我是搞慈善的”, 我心想, 我去! 我五大三粗的一个爷们我怕卖东西的干嘛?! 我怕的就是你们这些把慈善搞成卖东西的人. 我说我急着去打包饭, 结果这家伙等我打包完饭又追上来, 用他蹩脚的Singlish介绍老年痴呆种种, 然后向我保证, 我们不收现金, 只收支票. 真假且不说, 这种风格让我觉得恶心, 于是丢了一句, 不好意思, 没有信用卡.
假如,
这是真的打劫, 现金拿走, have a nice day! 我也不会觉得怎样. 但募捐就是募捐, 不是卖保险啊.
路上顺便把身上的硬币捐给了抱着罐子的学生们, 学生们只会腼腆, 不会耍流氓.
环球时报
MFA声明: http://www.mfa.gov.sg/content/mfa/media_centre/press_room/pr/2013/201308/press_20130923.html
个人觉得, 环球时报转载的那篇报道的内容没有什么问题, 只是标题有点过. 但是, 当我看到这样的微博, 我惊呆了:
胡锡进, <<环球时报>>总编辑
“胡锡进因其主编的报纸《环球时报》在2012年5月30发表了一篇名为《反腐败是中国社会发展的攻坚战》的文章而备受议论。该文章原标题是“反腐败是中国社会发展的攻坚战”,但腾讯网在转载过程中选取文章内部的一个片面的观点“要允许中国适度腐败 民众应理解”作为标题,由于网站自动抓取的关系,中国国内大多数网站反应片面观点的标题广泛传播,导致舆论对《环球时报》大加讨伐。对此《环球时报》官网微博和总编胡锡进对腾讯网这种恶意篡改新闻标题的行为给予了抨击。最后腾讯网新闻也对原新闻标题进行了更改,并以道歉收场。” — http://zh.wikipedia.org/wiki/%E8%83%A1%E9%94%A1%E8%BF%9B
胡编辑的微博, 很像小伙伴们的吵架, 没有就事论事, 反倒有点愤青的味道, 扯一些没用的.
“是否比张家口或者东莞的外事办公室更专业”, 话里有话, 意犹未尽的感觉.
钓鱼岛的名字, 都知道有俩名, 在日本开会当然就入乡随俗人Senkakus, 这也没什么不妥啊.
最后还要略带揶揄的提醒, 真是令人惊讶啊.
我们的媒体, 在带领我们走向何方?
人民网上的评论:
这, 这是什么跟什么啊.
与其看垃圾新闻, 不如蒙头睡觉, 两耳不闻窗外事.
One difference between a smart programmer and a professional programmer is that the professional understands that clarity is king . Professional use their powers for good and write code that others can understand.
Use Intention-Revealing names 表明意图
int d; –> int daysSinceCreation;
list1 –> flaggedCells
Avoid Disinformation 提供真实信息
accountList: Unless it’s actually a List. otherwise, accountGroup/bunchOfAccounts/accounts would be better
Make meaningful distinctions 有意义的区分
copyChars(a1, a2) –> copyChars(source, destination)
Use Pronounceable Names 使用可以发音的变量名称
luo –> lastUpdatedOn
Hungarian notation 匈牙利命名法 不必再刻意添加前缀
strName –> name
m_desc –> desc
Class names: noun or noun phrase. Method names, verb or verb phrase.
Don’t be cute 清晰表达即可, 不要画蛇添足
eatMyShorts() –> abort() [Eat my shorts, by Bart Simpson]
Pick One Word per Concept 为一个概念选定一个名称 Don’t pun 不要使用双关词汇
fetch, get
add, insert?
Use Solution Domain Names 使用解决方案领域内词汇
AccountVisitor, StudentFactory
Add Meaningful Context 有意义的语境, Don’t Add Gratuitous Context 但不要增加无意义的上下文
Class name: SGMailingAddress –> MailingAddress
// Proudly powered by Apache, PHP, MySQL, WordPress, Bootstrap, etc,.