作者dream1124 (全新开始)
看板java
标题Re: [问题] C#转学Java
时间Sun Oct 23 19:05:35 2011
※ 引述《LaPass (LaPass)》之铭言:
先感谢你的比较文,上了一课真的很实用
不过有个地方我想补充一下
: 以及,之前在C#中常常用委派(delegate)设定一些点击、按键事件
: 那时是直接塞方法名称就可以,例如:
: class C
: {
: public void onClickEevent()
: {
: //点下Button时要做的事
: }
: }
: 设定时:
: Button.OnClick = onClickEevent; <=把Method放进delegate
: 但在Java中的做法是这样:
: class C
: {
: class OnClickEvent implements Button.OnClickListener()
: {
: @Override
: public void onClick(View v)
: {
: //点下Button时要做的事
: }
: }
: }
: 设定时:
: Button.setOnClickListener(new OnClickEvent());
: 其他Java的SDK我不知道是怎麽设计
: 但是在Android SDK里,设定某个条件触发某个状况,都是这样写
虽然我对 C# 是完全不懂, 但我觉得这两个地方的作法本质应该是不同的
C# 的作法应该是 function pointer 吧?
执行期决定应该要执行哪个函式~
但下面 Java 的作法不是 Java 的语言特性,
真要说的话是因应 Java 没有 function pointer 的特性,
而使用设计模式(Design patterns)来解决这个问题。
范例这模式是观察者模式,除此之外常用来解决类似情境的还有策略模式。
Java 算是个相当静态型态的语言,绝大多数执行前的宣告都要给它型态,
赞成这样做的人会认为安全啦,而批评者就觉得设计模式根本就是
为了解决死脑筋的 Java 语言而产生出来的补救措施,究竟是好是坏就看大家怎麽样..
至於为什麽让 Inner class 实作界面....
我想这就是因为你更上面提到的,方便呼叫参考吧~
总而言之,这两者放在一起当成语言特性来好像有点怪怪的....
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.136.155.111
1F:推 LaPass:呃.... 我那段只是表示,在c#中那样用的东西,在Java中可以 10/23 21:05
2F:→ LaPass:用那种方式取代。底层我不太管,除非遇到问题才会去看。 10/23 21:07
3F:→ LaPass:delegate也不等於C、C++的函数指标,只是功能类似而已。 10/23 21:10
4F:推 lachtchlee:Java比C或C++更具有动态性 更能适应时刻变化的环境 10/26 00:43
5F:→ lachtchlee:Java不会因程序库的更新 而必须重新编译程序 10/26 00:49
6F:→ lachtchlee:d大说Java算是相当静态型态的语言 程设圈内没人认同 10/26 00:55