java 发现居然不明确支持函数指针。 c#有 delegate . oc 有 函数指针。c++就不用说了。连很多脚本语言都有。
这么重要的功能都不是第一公民。。java 这样都能排第一 。肯定有牛逼的地方。以后还要再深入学下 java。
没有函数指针,那就 接口先实现下。看看以后有什么更好的办法。
接口类
package com.linson; public interface IMyButton { public void OnClickMyButton(Mybutton btn); }
button.
package com.linson; public class Mybutton { public String mMyID; public IMyButton btnHandle; public Mybutton(String myid,IMyButton handle) { mMyID=myid; btnHandle=handle; } public void OnClick() { if(btnHandle!=null) { btnHandle.OnClickMyButton(this); } } }
page
使用了私有和内部类,和匿名内部类 。 分别来实现我们的功能。
原来java还可以内部类。这样也行。有合适的话。就不用新开文档来建立一个非复用类
不过 要是提供 函数指针 类似功能 就更方便。如 委托 。
package com.linson; public class MyPage { public Mybutton btn_ok; public Mybutton btn_cancel; public MyPage() { btn_ok=new Mybutton("add", new OnClickadd());//私有外部类 //btn_cancel=new Mybutton("cancel", new OnClickCancel());//内部类 //匿名内部类. btn_cancel=new Mybutton("cancel", new IMyButton() { public void OnClickMyButton(Mybutton btn) { System.out.println("inner class: click cancel button"); } }); } //内部类 class OnClickCancel implements IMyButton { @Override public void OnClickMyButton(Mybutton btn) { System.out.println("click cancel button"); } } } //私有外部类 class OnClickadd implements IMyButton { @Override public void OnClickMyButton(Mybutton btn) { System.out.println("click add button"); } }
主函数:
public class HelloWord implements IShowBase { public static void main(String[] args) { //Study_io(); MyPage indexpage=new MyPage(); indexpage.btn_ok.OnClick(); indexpage.btn_cancel.OnClick(); }