this.new XXX()를 쓰는 이유가 뭘까?
Java : 2008/08/21 14:25
Foo.java
Bar.java
흠.. 저 상황에서 java Foo 를 실행하면 어떤 결과가 출력될까요? SCJP 문제 같네요.ㅋㅋ 답은 Foo-Bar 입니다. 자기 내부에 있는 클래스랑 같은 이름의 클래스가 같은 패키지 안에 있을 경우. 내부 클래스가 우선시 됩니다.
만약에 Foo.java 클래스가 덩치가 좀 커서 inner class인 Bar 클래스가 잘 안 보인다면, 밖에 있는 Bar 클래스의 객체라고 착각할 수도 있겠죠?
그래서 inner class의 객체를 만들 떄는 반드시 this.을 앞에 붙여주는게 좋겠습니다.
요렇게 말이죠.
package innerclass;
public class Foo {
class Bar{
void say(){
System.out.println("Foo-Bar");
}
}
public void test(){
new Bar().say();
}
public static void main(String[] args) {
new Foo().test();
}
}
public class Foo {
class Bar{
void say(){
System.out.println("Foo-Bar");
}
}
public void test(){
new Bar().say();
}
public static void main(String[] args) {
new Foo().test();
}
}
Bar.java
package innerclass;
public class Bar {
void say(){
System.out.println("Bar");
}
}
public class Bar {
void say(){
System.out.println("Bar");
}
}
흠.. 저 상황에서 java Foo 를 실행하면 어떤 결과가 출력될까요? SCJP 문제 같네요.ㅋㅋ 답은 Foo-Bar 입니다. 자기 내부에 있는 클래스랑 같은 이름의 클래스가 같은 패키지 안에 있을 경우. 내부 클래스가 우선시 됩니다.
만약에 Foo.java 클래스가 덩치가 좀 커서 inner class인 Bar 클래스가 잘 안 보인다면, 밖에 있는 Bar 클래스의 객체라고 착각할 수도 있겠죠?
그래서 inner class의 객체를 만들 떄는 반드시 this.을 앞에 붙여주는게 좋겠습니다.
public static void main(String[] args) {
this.new Foo().test();
}
this.new Foo().test();
}
요렇게 말이죠.
'Java' 카테고리의 다른 글
| EJ2E Item 1. 생성자 대신 static 팩토리 메소드 사용을 고려하라. (0) | 2008/10/27 |
|---|---|
| Effective Java Reloaded (0) | 2008/10/26 |
| ReadWriteLock 인터페이스 (0) | 2008/09/25 |
| Generic 팩토리 메소드 (2) | 2008/09/25 |
| 자바의 숨겨진 기능들 (6) | 2008/09/22 |
| this.new XXX()를 쓰는 이유가 뭘까? (2) | 2008/08/21 |
| Magic Trick In Java (0) | 2008/08/01 |
| javadoc 작성시 # 사용하기 (0) | 2008/08/01 |
| 자바의 volatile 키워드는 무슨 의미일까... (0) | 2008/07/03 |
| 자바의 레퍼런스 클래스 사용 가이드라인 (0) | 2008/05/12 |
| Logging/StaticLog (0) | 2008/05/09 |
TAG inner class





