flashlite 2009-05-18 09:09
浏览 231
已采纳

请教怎样根据对象的引用得到包含它的对象的引用呢?

  有了一个对象的引用,怎样可以知道包含它的对象的引用呢?比如对象A包含有对象B,对象B的引用传递给了另一个对象C的方法,那么在对象C的方法里,可以怎样得到对象A的引用呢?
好像在AWT里可以调用getParent()来得到,但我只是用基本的Java语言,没有用任何框架,Java语言本身提不提供这种功能呢? 刚从C语言转到Java,在C语言里很容易就可以通过指针得到了,但Java里怎样做在网上找了很久也没有找到答案,只好在这里向各位牛人求教了。

  • 写回答

1条回答 默认 最新

  • rednaxelafx 2009-05-18 10:28
    关注

    如果对象a拥有对象b的引用,现在在某个方法里你只有b的引用而想得到a的引用,这是原问题的意思对吧?

    那么答案就是:你不能,即使C里也不能。
    最简单的例子就是链表的实现了。如果在C里,一个链表节点是像这样定义的:
    [code="c"]struct Node {
    struct Node* next;
    void* value;
    };[/code]
    一个典型的单向链表的节点。那么如果你现在手上有任意一个非空单向链表中任意不是头的节点的指针,你能找到头节点的指针么?
    就是因为不能,所以才需要双向链表:
    [code="c"]struct Node {
    struct Node* prev;
    struct Node* next;
    void* value;
    };[/code]

    楼主提到AWT的getParent(),为了实现那个方法的功能,AWT组件里是保留了对parent的引用的。楼主如果需要让自己的对象有双向导航能力,也一样在两边相互保持对方的引用就行。

    诚然,C里可以这样:
    [code="c"]struct Foo {
    /* ... */
    };

    struct Bar {
    Foo foo;
    };[/code]
    这样Bar里保存的就不是Foo的指针而是Foo的实例。但这与双向导航的实现没关系,取得了foo的指针也不能类型安全的得到Bar的指针。
    在Java里只有原始类型能直接嵌在对象里,对引用类型则只能保存其引用。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)