具体两个线程间是如何通信的 ?能否给举个实例!谢谢 !现在急用
有的话!通知我一声!非常感激!我的QQ是84750858
re: 内部类让我厌恶Java 喜来乐哈哈 2007-03-31 18:10
@auguusstt
您的厕所和门帘的比喻非常形象. 问题是,
下次该换个厕所呢, 还是继续用门帘呢?
厕所该不该提供厕纸?
纯属搞笑, 把内部类比喻成门帘有点冤枉.
re: 内部类让我厌恶Java 喜来乐哈哈 2007-03-31 17:57
@TreeNode
没有万能的语言。
记得一位大牛说过,"设计一门语言最难的一个问题就是对一些优秀的概念说不。" Java没有加入delegate肯定和当时Java团队的设计目的有关,别忘了Java最初只是作为小电器的控制语言而设计的,俗话说,三岁看老。都是有历史原因的。怎样说Java比C#对编程语言的贡献要大很多。有人采访C++的创始人Bjarne Stroup的时候问他对C#的意见,Bjarne Stroup说,他不知道为什么还要开发一门新的像C#这样的语言。
匿名类和内部类是在Java1.1才增加的,当时很多Java程序员也反感这东西,主要是不喜欢的它的句法。在此之前的Java程序员往往是这么写的
class Clazz implements SelectionAdapter {
public void widgetSelected(SelectionEvent e){
// 你的实现
}
Clazz() {
b.addSelectionListener(this);
}
}
这样写, 一个不好的地方就是, Clazz也是一个SelectionAdapter.
应该说当我们习惯内部类以后, 内部类还是给我们带来了一定的便利. 还是一句老话, 天下没有免费的午餐. 凡事都是有代价的.
内部类相比delegate的长处还是有的, 比如, 内部类也可以继承自另一个类, 从而继承了另一个类的实现. 这样的例子比比皆是, 我想, delegate没法做到吧.
当然喜欢delegate的人不只你一个, 德国的一个教授搞过一个项目, 好像叫Darwin Lava, 就尝试为Java加上delegate.
Java也有可能在将来加入delegate.
顺带说一句, IBM的大牛们写的Java代码, 从细了讲谈不上漂亮, 那帮人大多原来都是用Smalltalk的, 但是大的结构和框架非常漂亮. 里面有太多软件设计的大牛了.
其实从编程语言本身来说Smalltalk要比Java优秀, 而且出现的时间也差不多, Java成功了, 使用Smalltalk的人却越来越少. 这个世界很有意思的啦.
re: 在SWT中实现自绘Combo 催月泪 2007-02-09 23:15
哦!原来如此,看的出来前辈你是研究过SWT源代码的,真是不简单。
对于WIN32SDK我只有浅薄的基础,在阅读SWT源代码一定会很不适应,所以今后我一定会常来这里的。
谢谢!非常感谢前辈指点
re: 在SWT中实现自绘Combo[未登录] treenode 2007-02-08 22:07
文档里是没有写的,因为这是SWT的内部实现。你从Eclipse网站上下载SWT源代码包,打开以后就可以找到这些包和所有代码,里面实现了什么则需要自己去研究。
re: 在SWT中实现自绘Combo 催月泪 2007-02-08 20:40
treenode前辈:你好
在eclipse中国社区看了你的几篇文章,我好生佩服你.我在你的自定义控件的两篇文章中都看到了import org.eclipse.swt.internal.win32.这个包,但是我在eclipse3.2的API文档中怎么也找到相关的说明,在google中也搜索不到有用的信息.我找你找了好久,并且在eclipse中国社区发了寻人启示贴,但都没有回音,今天终于找到你的BLOG了.我很高兴.
我想请教一下,关于这个包那里相关的资料呢?如果可以的话,您能不能给我一些.
不胜感激!
gaojinglin@gmail.com
催月泪 西安
2007.2.8
re: 武侠隐喻反思 ddd 2006-12-03 11:46
楼主这样想法所以说中国从来都只有平用的软件
re: 武侠隐喻反思 商业计划书 2006-12-03 01:41
同意treenode。技术从来都是附属于业务的一个手段,把事情做成做好,发挥自己的建设性作用,是业务需要的。个人的英雄,除了少数情况,都带有某种破坏作用
re: 武侠隐喻反思 心内求法 2006-12-01 18:07
@TreeNode
嗯,这样说比较清楚了。谢谢!
但是技术水平低到一定程度时对项目也会起到破坏作用,呵呵
re: 武侠隐喻反思 TreeNode 2006-12-01 17:55
脚踏实地是一种职业素养。这不是道德要求:我们要的是合格的软件工程师,不需要正义的使者。
我衡量一个人的标准,不是看技术水平高低,而是看他对开发的作用:是建设还是破坏。如果一个人水平很高,但是不能和其他人合作,那么水平再高也不能要。
你可以理解为团队协作,但我真正要表达的意思是:武侠观念影响下容易出现唯技术论的“高手”,而不是IT业真正需要的软件工匠。
re: 武侠隐喻反思 心内求法 2006-12-01 17:39
@TreeNode
那么你希望开发人员"脚踏实地",是否可以理解为一种道德上的要求呢?或者说,素质上的要求。
再次思考了你的文章,我想你更强调的是团队的协作。但是团队协作也不排斥技术水平比较高的人啊,只是应该考虑让这样的人在团队中发挥什么样的作用。
http://www.blogjava.net/wanghaikuo/archive/2006/11/09/80054.html
这篇文章表达了我的一部分观点,我们可以探讨一下。
re: 武侠隐喻反思 TreeNode 2006-12-01 17:27
@ 心内求法:
你所说的“大侠”所为正是我想要反对的东西。
至于德,我不太想提它,因为和我想说的关系不大,而且含义也太模糊。
在中国几千年历史上,道德礼教一直是统治者用来杀人的刀。
不如说公民素质,可操作性还强一些。
re: 内部类让我厌恶Java 心内求法 2006-12-01 15:57
@TreeNode
骂也没用啊,默默承受吧,默默享受吧,呵呵
re: 武侠隐喻反思 心内求法 2006-12-01 15:50
武侠,重点还在一个“侠”字。那些没有责任感,没有正义感,没有“侠义心”的而仅仅武功高的人,是杀手,是大盗,是败类。
软件行业也是一样的,“大侠”应该帮助、教诲初学者,改变不合理的行业现状,维持正常的“江湖秩序”。
中国武侠,向来讲“武”以“德”为先。追求武功高没有错,但是如果“武”高于“德”,就难免要出问题了。技术本身也没有错,但是如果技高于德,难免让人不齿。
我想楼主说的也是这个意思,对吗?
re: 武侠隐喻反思 海边沫沫 2006-12-01 15:43
你对武侠的理解是片面的
re: 内部类让我厌恶Java TreeNode 2006-07-07 21:36
Java和内部类都不是我骂的对象。语法只是语法,语法是无辜的。我想骂的是这个设计语言的人。
re: 内部类让我厌恶Java auguusstt 2006-07-07 15:28
这是java没有函数为第一公民的功能缺少,而不是匿名类或内部类的问题
有一天您上茅厕,上完后,发现茅厕并没有准备厕纸,没办法,发现每个隔档都有一个门帘,得救,但由于门帘质地太硬,把屁股擦烂了,于是大骂门帘过于粗糙。
re: 内部类让我厌恶Java TreeNode 2006-07-07 08:43
楼上:这段代码不是我写的。我不过是把Eclipse.org上面那些大牛的code摘下来一段。
你看看你重构出来的这几个类有什么特点?它们都只有一个方法,并且没有自己的任何状态。这是一个典型的反模式。一个没有自己状态的类根本不应当是一个类。就像Math一样,不过是为了为那些没主的方法找一个杂货柜。内部类在这里就像一个杂货柜。
更新text文本本来就应当是窗口的责任。把它作为类的方法是最自然最清晰的,而且可以重用。硬是塞一个内部类干什么?为了满足方法签名而已。除此以外对代码结构没有一点好处。
re: 内部类让我厌恶Java auguusstt 2006-07-06 21:50
楼上太夸张了八,你把java的写成那样,再把c#的粉饰一遍,这是不是太哲学脑瓜了!
随便挥挥手重构2分钟都不会让人有这样的错觉!!!
因为java中没有把函数作为一等公民,所以确实没有C#的简洁,但还不至于像陀屎,在很多情况下也还是很漂漂的。当然加上c#的语法特性会让有些情况简单下来
class MyRunnable3 implements Runnable{
public void run() {
if ( text.isDisposed() ) return;
text.append( "\nCompleted long running task " + id );
}
}
class MyRunnable2 implements Runnable{
public void run() {
if ( text.isDisposed() )
return;
text.append( "\nStart long running task "+ id );
}
}
class MyRunnable implements Runnable{
public void run(){
id = nextId[0]++;
display.syncExec(new MyRunnable2());
for ( int i = 0; i < 100000; i++ ){
if ( display.isDisposed() )
return;
System.out.println( "do task that takes a long time in a separate thread " + id );
}
if ( display.isDisposed() )
return;
display.syncExec(new MyRunnable3());
done = true;
display.wake();
}
}
class MySelectionAdapter extends SelectionAdapter implements Runnable {
public void widgetSelected( SelectionEvent e ){
BusyIndicator.showWhile( display, this );
}
public void run() {
Thread thread = new Thread( new MyRunnable());
thread.start();
while ( !done && !shell.isDisposed() )
{
if ( !display.readAndDispatch() )
display.sleep();
}
}
}
b.addSelectionListener( new MySelectionAdapter ());
re: 内部类让我厌恶Java TreeNode 2006-06-22 18:59
@猪:
我不知道你有没有用过Swing或SWT。为什么我讨厌内部类还不得不用它?原因文章和回复里已经说过好几次了。
我还特意把程序代码摆了出来,似乎很多人都不看。哪位有信心说“我能把第一段代码改到很漂亮”吗?那样我就相信你。
re: 内部类让我厌恶Java fantasy 2006-06-22 09:54
内部类让我厌恶 ? .... 匿名类好象才怎么不好玩~
不过看Java集合类的 Iterator 模式的实现....
内部类还是很好的。
re: 内部类让我厌恶Java 猪 2006-06-22 04:17
匿名类确实恶心,恶心的要命. 什么还没写呢,先弄四五行没用的垃圾在代码里。
不过,和什么“可测试”啊,“封装”啊就别往一块儿拉扯了。除了语法难看之外,它和其它任何一种closure技术概念上都一样。想要单独测试那块代码,你不会单独做个命名外部类先?匿名类本来就是为了封装一些和局部上下文紧密相关的比较简单trivial的逻辑的。
functionalj这种东西我不看好。除了一个简单的reflection to abstract class的转换器 (差不多的程序员都可以花半个小时自己写一个的),难用的curry机制,简陋的几个初级函数式算法,啥都没了。
要找java的delegate实现,google一下,有比它更好的。
要在java里搞函数编程,思想可以借鉴,但是这么邯郸学步不成的。
re: 内部类让我厌恶Java 霉干菜 2006-06-20 11:46
同意 CowNew说的
b.addSelectionListener( new SelectionAdapter()
{
public void widgetSelected( SelectionEvent e )
{
on_widgetSelected(e);
}
} );
多数用倒内部类的时候都是这种swing写法,就在listener里面新声明一个
内部类就是了,不用写到外面得,多看看就习惯了,哪种语言就算再烂用的
多了以后看的都会习惯得
re: SWT: 深入内幕之消息机制探秘(上篇) TreeNode 2006-06-19 19:13
Swing我不熟悉,不评论。
re: 内部类让我厌恶Java TreeNode 2006-06-16 20:22
看了,FunctionalJ还是弱类型的,引用方法名用的是字符串。
这种办法还是需要得到工具的支持才用得起来。
re: 内部类让我厌恶Java 寒寒 2006-06-16 20:12
哈哈,继续
re: 内部类让我厌恶Java 江南白衣 2006-06-16 19:55
不好意思我完全写错单词了,应该是FunctionalJ(
http://functionalJ.sf.net)
re: 内部类让我厌恶Java TreeNode 2006-06-16 19:29
还是没看到一个实例。呵呵。
@绿色使者、绿色心情
基本同意你的看法。Anders做了那么多年Delphi的架构,对于语言的理解的确很少有人能超过他。更重要的是他是一个注重实际的人,了解这方面程序员的实际要求。不过在企业架构这方面他也并不怎么在行,人无完人吧
@Robin's Java World:
你猜错了,我的背景是VC和Delphi。接触.Net要比Java晚两三年。
我自认对语言没什么偏见,Java的语言特性绝大多数也都乐意接受。只有内部类是例外。
@原创专栏 开源学习:
估计错误。我很喜欢Ruby,我觉得Ruby用Block来实现回调的办法很灵巧。
理解性差何指?如果不研究实现细节,语法上没什么不好理解的。
.Net面向对象性问题,我认为ADO.NET和ASP.NET的总体设计是有缺陷的。
但是对delegate这个语法特性,我觉得没什么问题。
@puke:
内部类我能不用就不用,但是Java我还是要用的。OTL
@CowNew:
如果大家都在用看上去有问题的办法,那就一定存在真正的问题。为什么那些人都要用内部类呢?因为没有办法。难道有多少个菜单/按钮你就写多少个外部类不成?如果说有人用错了,那么Java也有责任,因为这种语法就是在逼着人用错误的办法做事。
另:在google上搜索jfunctor竟然只有几个看上去像C++的东西,关键字错误吗?
re: 内部类让我厌恶Java CowNew开源团队 2006-06-16 18:41
内部类不只是用来做回调,回调也不只能用内部类来实现,用内部类实现的回调如果设计合理的话也不一定会ugly。只能说java中因为没有delegate所以在事件监听实现上只能用接口实现,而很多人用的时候是直接写了实现接口的内部类,而没有进行必要的抽象。内部类没有错,只是有人把它用错了。
re: 内部类让我厌恶Java steeven 2006-06-16 15:29
彼此彼此,avalon里面的静态***Property也很恶心嘛,一堆一堆的.
毕竟java出来的早,还在恐龙年代,别指望和现代美女比较啦.
sun也不争气,赶快被google收购算球,浪费java
re: 内部类让我厌恶Java puke 2006-06-16 13:40
既然恶心到这个程度就不要用了,blogjava也清静点
re: 内部类让我厌恶Java google 2006-06-16 13:29
内部类有时候很不错哟
re: 内部类让我厌恶Java 原创专栏 开源学习 2006-06-16 10:10
不要眼中只有java,c#.
内部类可以模拟闭包的一些特性。
那估计你不会接受 python,ruby,javascript这些灵活的语言了。
.net的delegate只是对MVC的一种封装,自己实现了个万能的监听器,又做了优化。
代码写起来是好了,可理解上就比较差了。 偶是看了 李建忠 翻译的那本书才弄明白的。其实.net也有很多问题,为了让开发人员方面,丢掉很多面向对象的概念,对有些人,比如我来说,觉得不伦不类。
http://www.dearbook.com.cn/book/12797
这本书不错
re: 内部类让我厌恶Java Robin's Java World 2006-06-16 09:52
我想说的是,首先你不应该这么讨厌内部类,作为一种语法存在,肯定有一定的道理,而在编程中,我们也确实由于内部类而获得了一些方便。
或许你是从.net到java,所以有一些.net先入为主的感觉,你的思维有些习惯.net的做法。我一开始就做java,在做VB和VC编程时反而有些不习惯,思维上有很多方式调整不过来,有些问题自然而然的就想到了用java的思维方式来解决问题。
re: 内部类让我厌恶Java 绿色使者、绿色心情 2006-06-16 00:58
@TreeNode
同意这种说法
.net很多语法概念,相比java来说,都更便利、高效
原来一直专注于.net,其中的attribute、delegate,property等等的用法都很喜欢的
delegate和event配合起来,还可以实现观察者设计模式,在很多用到事件、消息交换等等的逻辑中,显得非常直观
re: 内部类让我厌恶Java TreeNode 2006-06-16 00:34
delegate事实上不是指针而是对象,一个派生于MulticaseDelegate的对象。M$隐藏了它的细节而已。
内部类的封装和复用体现在哪呢?我是这么看的:如果它和外部类需要如此紧密的耦合,以至于可以完全访问外部类的所有私有字段,那么它恐怕根本就不应该作为一个类。不然的话,它反而只是在破坏外部类的封装。如果它和外部类没有耦合或者只有接口耦合,那么它完全应当拿出来作为单独的类。
我不知道内部类复用性强指的是什么。内部类严重依赖于外部类的存在,你根本没法把它单独拿出来复用。也许你说的是多个方法可以共用同一个内部类?这不是什么值得一提的优点,其他语言的回调方法一样是可以共用的。
我还是希望能看到一个能证明内部类优点的实例,空对空的感觉实在是不太好。
re: 内部类让我厌恶Java CowNew开源团队 2006-06-16 00:14
我对.net的delegate 理解并不是很深入,可能说的有错误。我认为delegate只是一个方法指针而已,而java的内部类则是一个类,虽然可能有的时候会和宿主类共享一些成员,但是其封装性和可复用性更强。
re: 内部类让我厌恶Java TreeNode 2006-06-15 23:46
答CowNew:我自己就经常这么写。不过这样也没多少好处,比比看C#怎么写:
btnInvoke.Click += BtnInvokeClick;
再看看Java如何用四五行代码、两层括号实现同样的功能。何苦呢?
我倒是很想看看什么地方可以用内部类优雅的解决其他办法解决不了或很难解决的问题。但是我还没有看到过。倒是很多Java教科书都苦口婆心的说:学会适应内部类吧,熟悉以后你会发现它并不是那么难。这样的说明本身就让我觉得很有趣。
回调简单吗?我在这个BLOG上的另外一篇里面也说到这个问题。回调概念简单,实现起来其实是相当复杂多变的。这个领域里C++有functor,MFC有Handle Map,ATL有Thunk,VCL有TMethod,Python和Ruby有closure。多到让人眼花缭乱的地步。Java的实现是最让我觉得难看的一种。
答江南白衣:
JFunctor我不了解,有机会看看。
自己曾想过用反射,不过反射的问题是Java并不把函数当成对象,因此C#那样的语法是行不通的。如果用方法名称的话就没有编译器检查,同步是个问题。
另反射的性能也要考虑,对于一般的消息没有问题,如果是MouseMove或者很频繁的Timer事件是会影响效率的。
re: 内部类让我厌恶Java 江南白衣 2006-06-15 23:39
JFunctor这种用反射实现函数指针的方法可以用么?
re: 内部类让我厌恶Java CowNew开源团队 2006-06-15 23:07
其实你完全可以这样写,只把内部类需要实现的方法中抽取出一个新的方法来,比如:
b.addSelectionListener( new SelectionAdapter()
{
public void widgetSelected( SelectionEvent e )
{
on_widgetSelected(e);
}
} );
private on_widgetSelected(SelectionEvent e)
{
Runnable longJob = new Runnable()
。。。。。。。
}
on_widgetSelected中的方法还可以进一步如此抽取。java确实不适合做界面开发这种层次的工作(虽然sun在努力改进这一点)。如果用好了,java的内部类可比.net的delegate 好用多了,内部类可不光光只是用来做回调这么简单的工作的。
re: 内部类让我厌恶Java Anders小明 2006-06-15 22:44
嘿嘿,java语言有些地方是不如.net做的好!另外java的语言的演化在有些地方背离了它的初衷。.net平台一开始规划的比较好!
re: SWT: 深入内幕之消息机制探秘(上篇) foxcai 2006-06-09 03:01
已经下载了.
希望楼主能有更多好的文章.
re: SWT: 深入内幕之消息机制探秘(上篇) TreeNode 2006-06-05 23:51
今天上传文件仍然失败,我放弃了。全文做成PDF格式,有兴趣的可以到这里下载:
http://www.yousendit.com/transfer.php?action=download&ufid=19BF243E3E7F9D9C
或者如果有Eclipse中文社区帐号的话,这里也可以:
http://www.eclipseworld.org/bbs/read.php?tid=5132
SWT的线程,只要了解Display对象提供的几个同步方法,其他方面和一般的Java线程没有什么差别了。Eclipse.org上面的文章也说得很明白,似乎没有什么东西可写的。
re: SWT: 深入内幕之消息机制探秘(上篇) foxcai 2006-06-05 22:43
看来楼主的Win编程也很厉害啊.
看了楼主的文章感觉霍然开朗,有了些感觉.
强烈期待下篇.
楼主能不能写一些关于SWT线程的文章呢?
re: SWT: 深入内幕之消息机制探秘(上篇) foxcai 2006-06-05 21:57
楼主表着急.
慢慢来.
期待你的下篇.
re: SWT: 深入内幕之消息机制探秘(上篇) TreeNode 2006-06-04 17:32
答楼上,我已经努力了一整天,不知是否因为文章太长格式复杂,这个HTML编辑器速度难以忍受而且频频出现脚本错误,上传文件也失败。我觉得很失望。或许我会想其他办法解决。
re: SWT: 深入内幕之消息机制探秘(上篇) foxcai 2006-06-04 16:41
楼主.
你后面的图片都没有贴上来啊
能不能处理一下啊.
re: SWT: 深入内幕之消息机制探秘(上篇) Jet Geng 2006-06-04 09:01
强人。期待下一篇。