至此
(
(
在下面這個例子裡
(
(
(
(
(
(
所有這些都在innerscopes包內發生
//: Destination
package c
interface Destination {
String readLabel();
} ///:~
由於我們已認為Contents可能是一個抽象類
//: Contents
package c
interface Contents {
int value();
} ///:~
盡管是含有具體實施細節的一個普通類
//: Wrapping
package c
public class Wrapping {
private int i;
public Wrapping(int x) { i = x; }
public int value() { return i; }
} ///:~
在上面的代碼中
第一個例子展示了如何在一個方法的作用域(而不是另一個類的作用域)中創建一個完整的類
//: Parcel
// Nesting a class within a method
package c
public class Parcel
public Destination dest(String s) {
class PDestination
implements Destination {
private String label;
private PDestination(String whereTo) {
label = whereTo;
}
public String readLabel() { return label; }
}
return new PDestination(s);
}
public static void main(String[] args) {
Parcel
Destination d = p
}
} ///:~
PDestination類屬於dest()的一部分
下面這個例子展示了如何在任意作用域內嵌套一個內部類
//: Parcel
// Nesting a class within a scope
package c
public class Parcel
private void internalTracking(boolean b) {
if(b) {
class TrackingSlip {
private String id;
TrackingSlip(String s) {
id = s;
}
String getSlip() { return id; }
}
TrackingSlip ts = new TrackingSlip(
String s = ts
}
// Can
//! TrackingSlip ts = new TrackingSlip(
}
public void track() { internalTracking(true); }
public static void main(String[] args) {
Parcel
p
}
} ///:~
TrackingSlip類嵌套於一個if語句的作用域內
下面這個例子看起來有些奇怪
//: Parcel
// A method that returns an anonymous inner class
package c
public class Parcel
public Contents cont() {
return new Contents() {
private int i =
public int value() { return i; }
}; // Semicolon required in this case
}
public static void main(String[] args) {
Parcel
Contents c = nt();
}
} ///:~
cont()方法同時合並了返回值的創建代碼
return new Contents()
但在這之後
return new Contents() {
private int i =
public int value() { return i; }
};
這種奇怪的語法要表達的意思是
class MyContents extends Contents {
private int i =
public int value() { return i; }
}
return new MyContents();
在匿名內部類中
//: Parcel
// An anonymous inner class that calls the
// base
package c
public class Parcel
public Wrapping wrap(int x) {
// Base constructor call:
return new Wrapping(x) {
public int value() {
return super
}
}; // Semicolon required
}
public static void main(String[] args) {
Parcel
Wrapping w = p
}
} ///:~
也就是說
在前述的兩個例子中
若想對匿名內部類的一個對象進行某種形式的初始化
//: Parcel
// An anonymous inner class that performs
// initialization
// of Parcel
package c
public class Parcel
// Argument must be final to use inside
// anonymous inner class:
public Destination dest(final String dest) {
return new Destination() {
private String label = dest;
public String readLabel() { return label; }
};
}
public static void main(String[] args) {
Parcel
Destination d = p
}
} ///:~
若試圖定義一個匿名內部類
只要自己只是想分配一個字段
//: Parcel
// Using
// construction on an anonymous inner class
package c
From:http://tw.wingwit.com/Article/program/Java/hx/201311/27008.html