有没有一种方法可以使用Java从对象本身内部销毁对象?

有没有一种方法可以使用Java从对象本身内部销毁对象?,java,Java,我想从对象本身内部杀死/删除对象 我需要的是,对这个对象的引用为null,但我不想将句柄传递给容器。下面是一个小代码示例: class Obj { void run(){ if(true) kill(); } } class A{ Obj o; void main(){ o.run(); } } 运行o.run()之后,我想o==null。这是可能的吗?您不能根据需要从对象本身内部将对对象

我想从对象本身内部杀死/删除对象

我需要的是,对这个对象的引用为null,但我不想将句柄传递给容器。下面是一个小代码示例:

class Obj {
     void run(){
         if(true)
             kill(); 
     }
}
class A{
    Obj o;
    void main(){
        o.run();
    }
}

运行
o.run()
之后,我想
o==null
。这是可能的吗?

您不能根据需要从对象本身内部将对对象的引用设为空。这里是如何做到这一点的,从您在范围中实际拥有要为空的引用的位置开始

完成
run()
后,将引用设为Null:

根据反馈进行编辑

class Obj {
    private boolean killMe = false;
    void run(){
        if(someConditionHere) {
            killMe = true;
        }
    }
    public boolean isKillable() { return killMe; }
}

class A{
    Obj o;
    void main(){
        o.run();
        if(o.isKillable()) {
            o = null;
        }
    }
}

您将无法从其自己的成员方法中取消对象引用,因为对象无法更改其他对象所拥有的引用。但您可以将其所有成员字段设置为null:将来的调用方每次尝试访问该对象时肯定会得到一个NullPointerException。如果你仔细想想,这甚至比自杀还要好:这个物体会活到足以传播死亡的程度。
如果幸运的话,你甚至可以让整个应用程序自杀

如果一个对象可以将其他对象对它的所有引用都设置为null,那么对象世界将是一片混乱,因为在OOP中,一个对象“拥有”它的属性(无论如何是私有的),并且能够从外部源更改它们将完全打破封装概念

现在我很确定它有时可能很方便(否则你就不会问这个问题),但是如果你是用java编程的话,你就不被允许“开箱即用”。
唯一的方法是使您的对象和引用它的对象在一个共同的策略上达成一致。
类似于isDead方法,在尝试执行任何其他操作之前应该调用该方法。
您还可以实现一个心理支持对象,该对象将代理从外部对象到您的抑郁对象的访问。当您的对象想要死亡时,他只需通知其支持对象,PS对象将停止代理消息,您的对象将被垃圾收集。

我会这样做:

class Obj {
    Obj run(){
        if(someConditionHere) {
            return null;
        }

        return this;
    }
}

class A {
    Obj o;
    void main(){
        o = o.run();
    }
}

因此,不需要在A中检查o的内部状态,它更为封装。

o=null是自杀的捷径。不是吗?所以使用它。然后垃圾收集器博士会来把它带到墓地。如果我没弄错的话,在java中,你不能使用对象的引用来更改对象的值,因为对象在java中通过值传递。@Juvanis
通过键入this=null
-这完全是错误的。Krever-我建议你多读一些关于对象生命周期和垃圾收集的内容。@Krever-对不起,如果你读了,你就不会问这个问题了。Java没有对象“删除”本身的概念,即使不再有对对象的任何引用,也不能保证它会立即被“删除”。@KareemMesbah-对象引用是按值传递的。如果混淆,我将此“true”设为ide。杀死对象取决于某些条件,这些条件基于Obj的一些私有成员。所以我想把它放在Obj里面。所以,这是可能的…编辑,以反映我认为你想要什么。让对象在
run()
期间设置自己的状态,并在
run()
返回后询问状态。