2011/09/26

java中的Class.this


首先先複習一下基本:
在 Java 的 Class 內宣告的 Class,稱為 Nested Class(巢狀類別)

Nested Class 又分為 staticnon-static 兩種,其中加上 static 宣告的就叫做 Static Nested Class;而 non-static 的 Nested Class 又稱為 Inner Class(內部類別)

Inner Class 還可以再細分為三種又是另外一個故事了,這邊就不提
那 Class.this 究竟是代表甚麼呢...
public class ClassThisTest {
	public static void main(String[] args) {
		OuterClass outerInst1 = 
				new OuterClass("Outer class no.1");
		OuterClass.InnerClass innerInst1 = 
				outerInst1.new InnerClass();
		
		System.out.println(innerInst1.toString()); 
											//Inner class
		System.out.println(innerInst1.outerToString()); 
											//Outer class no.1
												   
		OuterClass outerInst2 = 
				new OuterClass("Outer class no.2");
		OuterClass.InnerClass innerInst2 = 
				outerInst2.new InnerClass();
		
		System.out.println(innerInst2.outerToString()); 
											//Outer class no.2
	}	
}

class OuterClass {
	private String outerMsg;
	
	public OuterClass(String msg) {
		this.outerMsg = msg;
	}
	
	public String toString() {
		return outerMsg;
	}
	
	public class InnerClass {
		private final String innerMsg = "Inner class";
		
		public String toString() {
			return innerMsg;
		}
		
		public String outerToString() {
			//Class.this
			return OuterClass.this.toString();
		}
	}
}
簡單說就是 Inner Class 用來參照相依的 Outer Class 實體用的。

因為在 Inner Class 裡面用 this 關鍵字的話,將會指向 Inner Class 實體,所以若是需要參照 Outer Class 實體時,用 Class.this 的方式就可以了。


沒有留言:

張貼留言