2013-06-04 1 views
4

클래스 내의 클래스 인스턴스를 null로 설정할 수 있습니까? 예를 들어, 다음과 같이 할 수 있습니까?클래스 내에서 클래스의 인스턴스를 null로 설정할 수 있습니까?

int main{ 
    //Create a new test object 
    Test test = new Test(); 
    //Delete that object. This method should set the object "test" to null, 
    //thus allowing it to be called by the garbage collector. 
    test.delete(); 

} 


public class Test{ 

    public delete(){ 
     this = null; 
    } 
} 

나는 이것을 시도했지만 작동하지 않습니다. "this = null"을 사용하면 왼손 쪽이 변수가되어야한다는 오류가 발생합니다. 비슷한 것을 성취 할 수있는 방법이 있습니까?

+0

null로 설정해야하는 이유는 무엇입니까? 가비지 콜렉터는 똑똑합니다. 그들은 언제 객체가 더 이상 도달 할 수 없는지를 안다. 이 객체에 대한 * 모든 참조를 제거하려고합니까? –

+0

아니,'test = null;'을 할 수있다. 대부분의 상황에서는 GC가 "수집 가능"하자마자 수집합니다. – assylias

+1

개체를 "파괴"하려고합니다. 객체에 대한 모든 참조가 사라질 때까지는이를 수행 할 수 없습니다. 당신이 할 수있는 최선은 객체에 "삭제 된"플래그를 넣어 모든 콜을 실패하게 만듭니다. –

답변

0

"this"은 최종 변수입니다. 값을 지정할 수는 없습니다.

당신은 참조가 참조 될 수있는 알 수없는 물체의

public class WrappedTest { 
    private Test test; 
    public Test getTest() { return test; } 
    public void setTest(Test test) { this.test = test; } 
    public void delete() { test = null; } 
} 
+0

맞아,하지만 거기에 상응하는 결과로 달성하는 방법은 무엇입니까? – eBehbahani

4

할 수있는 당신이 참조 널 (null)을 설정하려는 경우 당신이 할 수있는 그래서 객체 내의 코드가 그 참조를 null로 할 수는 없습니다. 당신이 원하는 것은 불가능합니다 (*).

* 모든 참고 문헌을 추적하기위한 스캐 폴딩 더미를 추가하지 않고 적어도 소유자에게이를 알리십시오. "편리함"이 될 수는 없습니다.

+0

이것은 객체의 인스턴스가 하나만 있다고 가정하지만 아이디어에 감사드립니다. – eBehbahani

+1

@ rioneye 삭제할 수있는 각각의'Test'에 대해'WrappedTest'의 새로운 인스턴스를 인스턴스화합니다; 'test'는 정적 변수가 아닌 인스턴스 변수입니다. 그래서 각각의 WrappedTest는 자신의'Test'를 가져옵니다. –

0

은 클래스 인스턴스에 대한 참조입니다. 참조 변수를 수정하면 참조를 수정하고 은 0 이외의 문자로 수정합니다. else. 예를 들어 :

Integer a = new Integer(1); 
Integer b = a; 

a = new Integer(2);  //does NOT modify variable b 

System.out.println(b); //prints 1 
0

Is it possible to set to null an instance of a class within the class?.

는 동일한 인스턴스의 멤버 방법에서이 작업을 수행 할 수 없습니다. 그래서 this=null 또는 그 종류의 일은 작동하지 않습니다.

어떻게 인스턴스를 null로 설정합니까?

해당 질문 자체가 잘못되었으므로 참조는 null이지만 인스턴스는 아닙니다. Java에서 사용되지 않는 객체는 자동으로 가비지 수집됩니다.

test=null으로 설정하면 결국 가비지 수집됩니다.

int main{ 
    //Create a new test object 
    Test test = new Test(); 
    // use the object through test 
    test=null; 
} 
관련 문제