저는 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 (메소드 또는 생성자가 호출되는 객체 )에 대한 참조 입니다. 이를 사용하여 인스턴스 메서드 또는 생성자 내에서 현재 개체의 모든 멤버를 참조 할 수 있습니다.
그것은 단지 구문 적으로 독특합니다.