java 匿名对象有引用,封闭对象的引用通过匿名类java进行转义
我在實踐中閱讀
Java并發性,下面的例子來自于此.我的問題是
這個參考逃脫是什么意思?會有什么問題? .這個引用是如何從doSomething(e)中逃脫的.
public class ThisEscape {
public ThisEscape(EventSource source) {
source.registerListener(
new EventListener() {
public void onEvent(Event e) {
doSomething(e);
}
}
);
}
}
這是如何解決這個問題的
public class SafeListener {
private final EventListener listener;
private SafeListener() {
listener = new EventListener() {
public void onEvent(Event e) {
doSomething(e);
}
};
}
public static SafeListener newInstance(EventSource source) {
SafeListener safe = new SafeListener();
source.registerListener(safe.listener);
return safe;
}
}
編輯:
我試過以下的例子
public class Escape {
public Escape( Printer printer ){
printer.print(new Escaper(){
@Override
public void parentData(){
theCulprit1(Escape.this);
}
public String name = "shal";
@Override
public void theCulprit(){
System.out.println( this.name );
System.out.println( Escape.this.age );
}
});
canAccess();
}
public void canAccess(){
this.age = "25";
}
public String age = "62";
@SuppressWarnings("unused")
public static void main(String args[]){
Escape escape = new Escape(new Printer());
}
}
class Printer{
public void print(Escaper escaper){
escaper.theCulprit();
escaper.parentData();
}
}
class Escaper{
public void parentData(){
}
public void theCulprit(){
}
public void theCulprit1(Escape escape){
System.out.println(escape.age);
}
}
由于逃生物體的構造不完整
這輸出shal
62
62
我在哪里改變了我的代碼
public class Escape {
private final Escaper escaper;
private Escape( ){
escaper = new Escaper(){
@Override
public void parentData(){
theCulprit1(Escape.this);
}
public String name = "shal";
public void theCulprit(){
System.out.println( name );
System.out.println( age );
}
};
canAccess();
}
public void canAccess(){
age = "25";
}
public String age = "62";
public static Escape newInstance( Printer printer){
Escape escape = new Escape();
printer.print(escape.escaper);
return escape;
}
@SuppressWarnings("unused")
public static void main(String args[]){
Escape.newInstance(new Printer());
}
}
在這里.它輸出shal
25
25
我對嗎 ?
還有任何重新排序的操作,因為在第一個例子中,年齡被初始化為62.
即使沒有在我的第二個例子中進行自由競技場決賽,它仍然有效!
總結
以上是生活随笔為你收集整理的java 匿名对象有引用,封闭对象的引用通过匿名类java进行转义的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php-cli下载,php-cli-co
- 下一篇: java 类之间转换,java中类对象之