this
의 사용에 대해 궁금합니다. 안드로이드의 샘플 코드와 문서가 this
키워드를 사용하지 않기 때문에 (저는 안드로이드 엔지니어가 일반적으로 똑똑하기 때문에 기본으로 사용합니다.). 나는 단지 안드로이드 엔지니어들이 this
을 많이 사용하지 않는 근본적인 이유에 대해 궁금합니다.Java에서`this`를 사용하는 것은 나쁜 습관입니까?
답변
주로 스타일 차이가 있습니다. 나는 왜 그것이 좋은 것인지 나쁜지에 대한 논쟁을 아직 보지 못했다. 개인적으로 저는 그것을 사용하기를 좋아하고 그것을 사용해야 할 때가 있습니다.
예를 들어 부모 클래스의 메서드를 호출하려는 Anonymous Inner 클래스가있는 경우 this
이 필요합니다. 예 :
class MyClass{
protected void doSomething(){
}
OnClickListener n = new OnClickListener(){
public void onClick(View v){
MyClass.this.doSomething();
}
};
}
this
다른 이유를 사용하는 방법은 인수 마스크 경우 멤버 변수이다. 이 경우 this
을 사용하여이 둘을 구별 할 수 있습니다. 그러나 논 리의 이름을 마스킹이 아닌 것으로 변경하는 것이 좋습니다. 해당 인스턴스 내에서 현재의 클래스 인스턴스에 대한 포인터를 전달할 때 this
를 사용하는
class MyClass{
protected int val;
public void setVal(int val){
this.val = val; // set the member variable equal to the method argument
}
}
또 다른 이유이다. 새 Intent
Intent i = new Intent(this, NewActivity.class);
를 만들 때 이것의 예는 this
를 사용해야합니다 아마 더 많은 장소가있다입니다. 이것들이 마음에 떠오르는 처음 몇 가지입니다.this
를 사용
이 옵션은 로컬 범위의 다른 것으로 숨겨진 현재 인스턴스의 일부에 액세스하려는 경우에만 필요합니다. OnClickListener에는 MyClass # doSomething()을 숨기는 doSomething()이 없기 때문에 내부 클래스에는 필요하지 않습니다. – jackrabbit
중요하지 않지만 코드에서 'this'를 사용하는 경우 모든 곳에서 사용하십시오. 그게 당신의 코드를 명확하게합니다.
나쁜 습관보다 개인적인 취향입니다.
아니요, 안드로이드 용 샘플 코드에는 'this'에 대한 참조가 있지만 나쁜 생각으로 생각할 이유는 없습니다. 그러나 시간이 많이 걸리는 것은 불필요하며 간결함을 위해 생략되었을 수도 있습니다.
예를 들어 정의 된 클래스 내에서 methodA()를 호출하면 this.methodA()라고 할 수 있습니다. 이 경우에는 전화를 걸 때 묵시적이므로 불필요합니다. 인수 이름이 설정중인 변수 이름과 동일한 setter에서 일반적으로 사용됩니다.
public void setName(String name) {
this.name = name;
}
당신은 어떻게 생각합니까? 예 : SDK coding style guide은 언급하지 않고 여러 곳에서 사용되는 것을 보았습니다. 그러나 변수에 대한 명명 지침을 따르면 종종 필요하지 않으며 생략 될 수 있습니다. 이는 종종 그렇습니다.
이 키워드를 사용하는 인스턴스를 언급 할 때 명료하게 사용할 수 있지만 문서에 언급 된대로 실제로 시행되는 스타일은 없으며 명명 규칙을 따르면 필요하지 않습니다.
와이없이 이름에 따라 완전히 유효한 세터는 첫 번째 예는 수 있지만, 그나마이를 사용한다는 것을
private int mCounter;
public void setCounter(int counter) {
mCounter = counter
}
private int increment;
public void setIncrement(int increment) {
this.increment = increment
}
참고 될 수있다. 두 번째로는 스타일 가이드와 더 가깝습니다.
필자가 보았던 대부분의 샘플 코드와 문서는이 코드를 사용하지 않기 때문에 '이 코드'가 마음에 들지 않는다고 생각했습니다. 그것은 나를 위해 읽을 수있는 문서를 조금 더 어렵게 만들었습니다. 왜냐하면 메소드가 'startService()'라고 언급하고'startService()'가 포함 된 클래스를 알지 못하기 때문입니다. 메서드 호출에 대해서는 – cesar
이 다릅니다. 한정자가 없으면 this.something()이 자동으로 Java에 일반적으로 거의 사용되지 않습니다. 나는 그것을 사용하지 않을 것이다. –
* "나는 방금 ..."* - 합의는 당신이 잘못한 것임을 가정하는 것입니다. –
는 안전 조치의 더 :
class MyClass{
void doSomething() {
}
OnClickListener n = new OnClickListener() {
void doSomething() {
}
public void onClick(View v){
MyClass.this.doSomething(); // MyClass#doSomething()
this.doSomething(); // OnClickListener#doSomething()
doSomething(); // OnClickListener#doSomething() if present,
// MyClass#doSomething() otherwise - danger!
}
};
}
는 회원의 존재 또는 방법을 제어 할 수없는 경우는 (예 OnClickListener
타사 클래스 인 경우)에 있기 때문에
- 1. 스윙과 awt를 함께 사용하는 것은 나쁜 습관입니까?
- 2. FooManager가 Foo.OnSthHappened()를 호출하는 것은 나쁜 습관입니까?
- 3. NSArrayControllers를 프로그래밍 방식으로 사용하는 것은 나쁜 습관입니까?
- 4. 정적 필드를 사용하는 것은 나쁜 습관입니까?
- 5. python의 getattr을 광범위하게 사용하는 것은 나쁜 습관입니까?
- 6. 긴 초기화 방법을 사용하는 것은 나쁜 습관입니까?
- 7. $ _POST에 쓰는 것은 나쁜 습관입니까?
- 8. 데이터 멤버에 직접 액세스하는 것은 나쁜 습관입니까?
- 9. 타이핑을 피하기 위해 임시 변수를 사용하는 것은 나쁜 습관입니까?
- 10. 작업에 따라보기를 변경하는 것은 나쁜 습관입니까?
- 11. 외래 키로 '뒤로 이동'하는 것은 나쁜 습관입니까?
- 12. 변수를 더미 값으로 초기화하는 것은 나쁜 습관입니까?
- 13. 나쁜 습관입니까?
- 14. Java 표준 키 저장소를 사용하는 것은 나쁜 습관입니까
- 15. 자체 get 메서드가없는 set 메서드를 사용하는 것은 나쁜 습관입니까?
- 16. js 파일에서 일련의 명명 된 함수를 사용하는 것은 나쁜 습관입니까?
- 17. UserControl에서 Form을 인스턴스화하는 것은 나쁜 습관입니까?
- 18. static 클래스에 state를 두는 것은 나쁜 습관입니까?
- 19. 클래스 내에 클래스를 포함하는 것은 나쁜 습관입니까?
- 20. 많은 유형의 별칭을 작성하는 것은 나쁜 습관입니까?
- 21. AJAX를 통해 HTML을 생성하는 것은 나쁜 습관입니까?
- 22. 참조가있는 동적 배열을 변경하는 것은 나쁜 습관입니까?
- 23. Jenkins를 통해 배포를 관리하는 것은 나쁜 습관입니까?
- 24. 이미지에 현지화 코드를 추가하는 것은 나쁜 습관입니까?
- 25. MongoEngine 사용자 문서를 확장하는 것은 나쁜 습관입니까?
- 26. 많은 DLL이 함께 제공되는 응용 프로그램을 사용하는 것은 나쁜 습관입니까?
- 27. 상대 URL을 명시 적 기본으로 사용하는 것은 나쁜 습관입니까?
- 28. CSS에서 음수 여백 또는 안쪽 여백을 사용하는 것은 나쁜 습관입니까
- 29. requireJS 모듈을 싱글 톤으로 사용하는 것은 나쁜 습관입니까?
- 30. asp.net mvc에서 많은 뷰 모델을 사용하는 것은 나쁜 습관입니까
* this *없이 살 수없는 사례를 제공해 주시겠습니까? – Gleno
'this'를 사용하는 것은 안드로이드에 대한 확신이없는 좋은 습관입니다. 핵심 가치 코딩과 관련이있을 수 있습니다. – Shahzeb
나는 그것 없이는 살 수 있다고 생각하지만 개인적으로 이것을 사용하는 것이 더 쉽다. 나에게 더 명백하다. 따라서 명확하게 해준다. – cesar