java中有类似于函数指针的东西没???????

jefflovejava 2008-12-18 03:47:39
java中有类似于c++中的函数指针或者是c#中的代理没?

或者说,我现在要在一个函数(function1)里调用某个函数(function2),function2的签名形式不变,但是所在的类以及名称会有变化,我想在function1的参数列表里加入function2的签名,不知道java应该如何实现这个?
...全文
714 26 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
pauliuyou 2008-12-19
  • 打赏
  • 举报
回复
这类需求用反射实现
WIN_ANGEL 2008-12-19
  • 打赏
  • 举报
回复
进来瞅瞅~
ccc_moriya 2008-12-19
  • 打赏
  • 举报
回复
mark...
axman 2008-12-19
  • 打赏
  • 举报
回复
难道就没有人懂CALLBACK这种基础概念?
fastmask 2008-12-19
  • 打赏
  • 举报
回复
上面都说了用接口来实现,或者用反射机制都是可以实现的。
没有必要讨论指针。
树成 2008-12-18
  • 打赏
  • 举报
回复
java的语言机制里面没有指针的概念,但是有动态代理,spring的AOP基础就是动态代理。
但是java里面没有指针概念却可以通过native的方式来封装指针,不过那不是java实现的,而是java利用C++去实现了。
我们都知道,所谓的指针就是一个内存地址值,也就是一个数字,它完全可以用long类型来表示。
你大概可以这么实现,写两个方法,一个传入一个Object类型,返回这个Object类型的地址值(long类型),另一个传入地址值(long类型数值),返回一个Object类型,然后根据需要吧这个Object类型进行强转(当然你也可以使用泛型来替代)。当遇到基础数据类型的时候,在native里面封装成对象类型类型就可以了,不然Object类型不能接受基础数据的。这样你就可以实现类似指针功能了。
不过这样实现我并不推荐,首先这样的实现不跨平台(跨平台也可以,每个平台写一个native,就像jdk那样),这样一来java优势荡然无存还不如直接用有指针的语言来开发,其次,这种实现方式极易使虚拟机崩溃(产生不可抛出异常的内存错误,因为它已不在java虚拟机管辖范围之内了),有时甚至会导致蓝屏死机这种可怕后果,慎用。
bigbro001 2008-12-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ZangXT 的回复:]
函数指针可以用接口类似的实现。
比如
public interface FunctionPointer{
voif function();
}

public void test(FunctionPointer fp){
fp.function();
}

只要给test方法传入不同的实现该接口的类的对象即可。跟你把指针指向不同的函数类似。
Effective Java中有说明,可以看看。
[/Quote]

学习了。。。
酒剑仙 2008-12-18
  • 打赏
  • 举报
回复
指针=引用
tianice 2008-12-18
  • 打赏
  • 举报
回复
引用功能类似
ZangXT 2008-12-18
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 bao110908 的回复:]
目前没有。但在 JDK 7 中可能会增加闭包,如果增加的话那就有了。
[/Quote]
不希望增加,呵呵。
  • 打赏
  • 举报
回复
目前没有。但在 JDK 7 中可能会增加闭包,如果增加的话那就有了。
chandlersong 2008-12-18
  • 打赏
  • 举报
回复
还是看看基本java基础入门之类的书吧。尽管没学过C,和C++,同时也觉得所谓的语言只是手中的一支笔。
但是,java和C的思考方式感觉完全不一样。一天到晚类比,等于没学。
pepsighost 2008-12-18
  • 打赏
  • 举报
回复
用引用就可以了
jhr924 2008-12-18
  • 打赏
  • 举报
回复
java 叫 引用
hbwhwang 2008-12-18
  • 打赏
  • 举报
回复
反射比函数指针更威猛
不善^ 2008-12-18
  • 打赏
  • 举报
回复
class A{
int i =10;

}

main()
{
A a = new a()
a.i; //这里引用也就是类似指针

}
guolimin1118 2008-12-18
  • 打赏
  • 举报
回复
UP
sleep_ok 2008-12-18
  • 打赏
  • 举报
回复
参考策略模式
jefflovejava 2008-12-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ZangXT 的回复:]
函数指针可以用接口类似的实现。
比如
public interface FunctionPointer{
voif function();
}

public void test(FunctionPointer fp){
fp.function();
}

只要给test方法传入不同的实现该接口的类的对象即可。跟你把指针指向不同的函数类似。
Effective Java中有说明,可以看看。
[/Quote]

谢谢提示了,我有点思路了,等弄好了回来结贴
twinsouzhili 2008-12-18
  • 打赏
  • 举报
回复
有,在JAVA中我们称引用.
加载更多回复(6)

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧