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进行转义相关推荐
- java里面有控制器吗_java怎么运行控制器里的类 java控制台输入类以及
import java.io.*; public class Input { static InputStreamReader isr=new InputStreamReader(System.in) ...
- java任何封闭实例都不是java_《java并发编程实战》读书笔记3--对象的组合
希望将一些现有的线程安全组件组合为更大规模的组件或程序 设计线程安全的类 如果对象中所有的域是基本类型变量,那么这些域将构成对象的全部状态.例如,LinkedList的状态就包括该链表中所有节点对象的 ...
- Java IO流大闯关--IO流的常用实现类
这个系列的博客主要是对Java高级编程中IO流相关的知识点做一个梳理,内容主要包括File类.IO流原理及流的分类.文件流.缓冲流.转换流.标准输入输出流.打印流.数据流.对象流.随机存取文件流.NI ...
- Java 并发编程(二)对象的发布逸出和线程封闭
对象的发布与逸出 "发布(Publish)"一个对象是指使对象能够在当前作用域之外的代码中使用.可以通过 公有静态变量,非私有方法,构造方法内隐含引用 三种方式. 如果对象构造完成 ...
- java多态性详解——父类引用子类对象
Java的多态性 面向对象编程有三个特征,即封装.继承和多态. 封装隐藏了类的内部实现机制,从而可以在不影响使用者的前提下改变类的内部结构,同时保护了数据. 继承是为了重用父类代码,同时为实现多态性作 ...
- java中四种引用类型(对象的强、软、弱和虚引用)
2019独角兽企业重金招聘Python工程师标准>>> 对象的强.软.弱和虚引用在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有 ...
- java中对象清空值_对象的引用和清除_Java语言程
对象的引用和清除_Java语言程 4.3.3 对象的引用和清除 在创建了类的对象后,就可以使用对象.即对象使用的原则是"先创建后使用". 使用对象的方法是:通过运算符". ...
- 通过链表深入理解Java的引用和对象
在正式介绍重点内容以前,先给像我这样的初学者强调一下 " = " 在引用和对象应用中的作用: 大致是 " = " 左边是引用," = " 右 ...
- Java通过引用操作对象的“共享”特性
先来理解一下引用和对象的关系:对于任何引用类型直接创建的变量都是一个引用,这个引用指向这个类型的对象,数据是存在对象中的,对数据的操作实质是通过引用找到对应的对象,在对对象中的数据进行操作. 而题目中 ...
最新文章
- 20181029NOIP模拟赛T2
- JDK源码解析-Runtime类
- 阮一峰react demo代码研究的学习笔记 - how is source code converted
- 《构建之法》 读书笔记
- slider节点透明背景_【Cocos Creator 实战教程(1)】——人机对战五子棋(节点事件相关)...
- java图的拓扑排序,本周算法:图的拓扑排序,本周算法拓扑排序
- docker-compose搭建EFK,继上篇使用filebeat+es对日志文件的过滤
- solidity 0.5.7简明教程
- C#程序之快速切换IP地址
- ubuntu18.04: 安装nanomsg
- 饥荒联机版服务器搭建_饥荒联机版(Don't Starve Together)专用服务器搭建教程
- Django 项目编码问题1UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xd2 in position 0: invalid contin
- 结合阿里云 FC 谈谈我对 FaaS 的理解
- SparkStreaming读取Kafka数据源并写入Mysql数据库
- 电机磁电热多场耦合 matlab,永磁电机电磁-温度场耦合仿真分析流程
- Cesium之地图清晰度解决方案
- cuda无法使用nvprof命令,找不到cupti64_2021_3.0.dll
- virtual box 安装oracle linux,Virtual Box下安装Oracle Linux 6.3
- H5项目中通过iframe引入语音导览解决微信jsapi关于同一级域名二级域名跨域问题解决方案
- Oracle建表及添加数据
热门文章
- TDMA 时分多路复用
- gprs连接中断记录_请收好!脉搏波血压计连接天天血压APP使用指南
- MATLAB库函数unwrap(相位解卷绕)的C语言实现
- AI+遥感智能解译,赋能智慧城市规划革新(人工智能案例)
- MySQL在哪里看secret_key_K8S 创建和查看secret(九)
- 1到10用递归c语言,为什么这个递归能输出1到10
- Testner自动化测试平台免费开放啦
- How to make a difference
- RegularExpressionValidator 常用
- java DOM4J 读取XML