클래스 이름과 함께 “this”사용이 어려워요.

저는 Android 프로그래밍을하고 있고 Intents에 대해 배우고 있었는데, C # 훈련 된 마음에 펑키 해 보이는 생성자를 보았을 때. 전화 :

Intent myIntent = new Intent(CurrentActivity.this, NextActivity.class);

두 매개 변수 모두 나에게 새로운 것입니다. 클래스 이름에 정적 “.this”가있는 이유는 무엇입니까? 이것은 Java 또는 Android입니까? 의 컨텍스트에 있기 때문에 “this”를 말하는 것과 동일하다고 가정하고 CurrentActivity있지만 클래스 이름 자체에서 “this”가 어떻게 호출 될 수 있는지 이해하지 못합니다. 또한. “.class”는 리플렉션에 사용되는 것처럼 보이며 C #에서 익숙하지만 이에 대한 통찰력도 환영합니다.

미리 감사드립니다.



답변

일반적으로 this. 그러나 때때로 this내부 클래스를 참조합니다. 예를 들면 다음과 같습니다.

Button button = (Button)findViewById(R.id.ticket_details_sell_ticket);
button.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        // it will be wrong to use only "this", because it would
        // reference the just created OnClickListener object
        Intent login = new Intent(ClassName.this, Login.class);
        startActivityForResult(login, LOGIN_REQUEST);
    }
});

답변

첫 번째 구성은 정규화 된 this 라고합니다 . 구문의 목적은 내부 클래스 (일반적으로 익명 내부 클래스) 에 있고 (익명) 내부 클래스가 this아닌 외부 클래스 를 참조하려는 경우 입니다 this. “qualified this”는 this모호한 컨텍스트에서만 사용할 수 있습니다 . JLS “표현식이 클래스 T 또는 T 자체의 내부 클래스가 아닌 클래스 또는 인터페이스에서 발생하면 컴파일 시간 오류입니다.”

두 번째 구문은 class literal해당 유형을 나타내는 Class 객체를 참조하는 방법입니다. 모든 컨텍스트에서 사용할 수 있습니다.


답변

“Classname.this”구문은 내부 클래스 용입니다. “Outerclass”유형의 엔 클로징 인스턴스를 참조하려면 “Outerclass.this”로 수행합니다.

NextActivity.class는 단순히 “NextActivity”클래스를 설명하는 Class 객체입니다.


답변

NextActivity.class자바 typeof(NextActivity)에서 C #에서 의미


답변

ClassName.this 내부 클래스에서 외부 클래스의 현재 인스턴스를 참조하는 데 사용됩니다.


답변

<ClassName>.this

`this ‘키워드는 중첩 클래스 인스턴스를 참조하기 때문에 중첩 클래스에서 둘러싸는 클래스의 현재 인스턴스를 참조하는 데 사용됩니다.

public class Siht { class NestedSiht { void demoThis () { System . err . println ( " Siht.this '는 다음의 인스턴스입니다 :" + Siht . this . getClass (). getName ()); } }   
      
         
            this' is an instance of: " +
                            this.getClass().getName());
            System.err.println("
void demoThis() {
    new java.lang.Object() {
        void demoThis() {
            System.err.println("`this' is an instance of: " +
                            this.getClass().getName());
            System.err.println("`Siht.this' is an instance of: " +
                            Siht.this.getClass().getName());
        }
    }.demoThis();
    new NestedSiht().demoThis();
}

public static void main(String [] args) {
    new Siht().demoThis();
}

}

 


답변

MainActivity.this ” 를 사용할 때 객체가 아닌 클래스를 참조하는 것처럼 보이기 때문에 혼란 스럽습니다 . 실제로 “this”를 사용할 때 java se 문서에 나와있는 것처럼 항상 현재 객체를 참조하는 것입니다.

https://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html

인스턴스 메서드 또는 생성자 내에서 이것은 현재 objec t (메소드 또는 생성자가 호출되는 객체 )에 대한 참조 입니다. 이를 사용하여 인스턴스 메서드 또는 생성자 내에서 현재 개체의 모든 멤버를 참조 할 수 있습니다.

그것은 단지 구문 적으로 독특합니다.