最近觉得自己长进了不少
起码不会像以前
谁说Java不好,说Java慢,我就跟谁急
看了Java 4 ever 便大呼过瘾,觉得那个才是真理!
(Java 4 ever是一部非常有意思的短片,仔细看每个人物代表的事物,和他们的对话,你会发觉很多东西)
以前总觉得,自己花了那么多的精力去学一门语言,到头来,被N多人说不是
觉得很委屈,血气方刚者,早已经破口大骂了...
也不问问这些评论到底对不对,或者对于这个领域使用这门语言合适不合适
就算别人说在了点上,那为何你气愤呢?
别人评论的是语言,又不是使用语言的人...
但是事实是,谈论语言的长短时,总是火药味十足...
如果真的热爱,比如Java,那么就必须知道它的长短!
而不是碰到什么都让它上。
忽然想起的刘未鹏(pengba)的一篇文章
大意是:当你手中有个锤子,你看到什么都像钉子
当你擅长Java,来什么项目,你就抡起Java就上,甚至,刚学会个XXX牛 B框架,不问三七二十一就网上套
有一个比喻:“让赵云抡个锤,让程咬金使个枪...虽然还是能战斗,但是战斗力肯定大打折扣了”...
语言真的只是工具,或者是武器
一寸长一寸强
一寸短一寸险
对好的语言,应该在前面外加一个领域的限定词,甚至说某个项目来限定
我非常同意《冒号课堂》其中的一个观点(很强悍的书,有空希望大家也看看,保证你视野顿时开阔)
大意是“热爱Java ,那么不妨去学习学习.NET... .NET借鉴Java而来,肯定吸收了Java的优点,并且会补充Java的不足!
如果你看到了.NET有的,Java也有,那么这些就是Java的优点,.NET新增了哪些特性,Java没有的,或者Java的某些特性被.NET抛弃,那么这些就能引起你足够的思考!...”
举个例子:
.NET有委托,Java没有委托...
可以看到Java7.0特性中也没有加入委托...
那是否能说Java落后呢? (就是这样的对比,才能引起你强烈的思考...不可否认,程序员多少有点语言宗教情结)
委托,来自C++的函数指针,提供了变量调用函数的能力
在C++的STL中,模板算法,常常需要传入函数指针,表明算法框架中缺失的部分
(比如find_if(),函数指针指向的函数表明了元素是否符合查找条件)
这样,就可以是一些算法、函数,得以重用
.NET使用委托方式...同样实现了上面的效果
Java 呢?
一开始,很容易想到反射API中的Method,一个invoke就可以执行函数,如果传入Method对象即可
我也曾直接使用Method模仿过.NET的委托
我以前的博客上的文章: http://emavaj.blog.163.com/blog/static/133280557201002934525244/
/**
* 委托可以使观察者模式更加具有普遍性
* 是一个解耦合的好办法
*
* 该委托类中,的异常没有自定义
* 如果做完善点,应该自定义委托异常
* @author Administrator
*/
public class EventHandler {
/** 存取委托函数信息 */
private Map<Object,Method> methodMap;
/**
* 存储方法参数类型,避免函数重载,调用有误
* 在.NET的委托中,函数类型不同是委托不成功的(也就是参数列表一致,返回值一致)
*/
private Class[] argsType;
public EventHandler(Class[] argsType){
this.methodMap = new LinkedHashMap<Object,Method>();
this.argsType = argsType;
}
public List<Object> excute(Object[] args) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException{
List<Object> results = new ArrayList<Object>();
Set<Object> objectset = this.methodMap.keySet();
for(Object o : objectset){
Method method = this.methodMap.get(o);
Object result = method.invoke(o, args);
results.add(result);
}
return results;
}
public void delegate(Object object,String methodName) throws SecurityException, NoSuchMethodException{
Method m = object.getClass().getMethod(methodName,this.argsType);
this.methodMap.put(object, m);
}
}
使用时:
EventHandler e = new EventHandler(new Class[]()); //假设方法参数为空
e. delegate( object1,"gogogo");
e.delegate(objcet2,"hahaha");
e.excute(new Object[]()); //假设返回值不需要使用
这样,只要e.excute()一执行,
就会伴随这 gogogo 和 hahaha方法也执行
其实这样做很傻,而且很乱,更重要的是很慢
但起码,自己经过了思考,得到了结果
我还是喜欢花时间在程序的“思想”上和“技巧”上,用智慧解决问题
而不是等着官方更新,加入新特性去解决问题
就像C语言中,实现封装,继承,多态都不是不可能!
只是麻烦点而已,而且也没必要
我觉得这个是一个人的成长
其实Java对委托,已经用接口来解决了!
如:Comparable等
篇幅有限,就不写下去了,免得太长...
分享到:
相关推荐
在高强度、快节奏的IT工作中,保持良好的心态,学会看淡压力和挫折,是维持工作与生活平衡的关键。 【标签】“资料”表明这是一个提供信息和启示的文本,对于IT人士而言,这可以被视为一种精神资源,帮助他们在面对...
丰田看淡自动驾驶着重驾驶辅助.pdf
能让你看淡一切的经典语录.doc
江苏省新沂市第三中学高中语文 放下得失,看淡名利作文素材(扫描版)
STN屏幕的色彩相对有限,通常呈现淡绿色或橘色,但通过添加彩色滤光片和分色技术,可以实现彩色显示。 STN液晶显示器属于反射式,依赖环境光来显示内容,因此在暗环境中显示效果不佳,需要额外的照明光源。相比之下...
7月社会服务行业投资策略:看淡外部影响,精选优质标的-0702-国泰君安-26页.pdf
报告标题和描述提到了“食品饮料行业点评:专注阿尔法机会,看淡市场波动”,这是一份关于食品饮料行业的研究报告,旨在分析行业当前状况、投资机会以及潜在风险。报告指出,尽管7月份消费复苏乏力,社会零售额增长...
【两大机构看淡融创信誉评级】标普和惠誉两大评级机构对融创中国的评级进行了调整。标普将其长期企业信用评级和大中华区信用体系长期评级列入负面信用观察名单,原因是融创的扩张步伐过于激进,巨额支出已超过其销售...
2018年第三季度基金投资组合分析:持股比例被动上升,看淡多数科技、消费类行业-西南证券-20181028.pdf
js 实现 图形淡出淡隐! 值得下载看看!资源免费,大家分享!!
淡雅的色彩则通常采用柔和的色调,如浅粉色、淡紫色或米白色,给人一种宁静、舒适的观感,非常适合用来表达文艺或清新的主题。 在"简约淡雅花朵ppt模板下载"中,花朵元素的运用是另一大亮点。花朵作为自然界中的...
首先,我们来看看"Default"目录。这个目录通常包含了皮肤的主要组件,如图片、CSS样式表、JavaScript脚本等,它们共同构成了论坛的基本界面元素。例如,登录、注册、发帖、回帖等操作的相关界面元素都可能包含在这里...
在压缩包中,还包含了一些URL文件,如"好用的网址导航.url"和"自由天空技术论坛.url"。这些文件实际上是在Windows中创建的快捷方式,指向特定的网页URL。它们通常用于收藏经常访问的网站,方便用户快速打开。用户只...
12月的投资策略建议投资者看淡短期市场的波动,并着重配置家电、汽车、光伏、电子、传媒等行业。这一策略基于11月份的市场表现,其中明星板块经历了一定程度的下跌,但股票型基金的总仓位却有所提升,特别是对大消费...
在“ppo web 页面的一些很小的东西”这个主题中,我们主要关注的是JavaScript在构建Web页面时的基础应用。JavaScript,作为Web开发三大核心技术之一(HTML、CSS、JavaScript),在创建交互式和动态网页上起着至关...
对于"简约淡雅"的主题,这意味着模板设计将倾向于使用淡色调、清晰的线条和留白空间,避免过于花哨的装饰,以实现一种平静而专业的氛围。在下午茶主题设计中,可能会融入一些与茶文化相关的图形元素,如茶叶、茶杯、...
淡绿色