java observable_Java 9:Observer和Observable废弃原因及解决方案
Observer和Observable在Java 9标记为废弃。
废弃原因
Observer和Observable有几个原因:
1、不能序列化
Observable没有实现Serializable接口,它的内部成员变量都是私有的,子类不能通过继承它来对Observable的成员变量处理。所以子类也不能序列化。
2、不是线程安全
在 java.util.Observable文档里没有强制要求Observable是线程安全的,它允许子类覆盖重写Observable的方法,事件通知无序以及事件通知发生在不同的线程里,这些都是会影响线程安全的问题。
3、支持事件模型的功能简单
支持事件模型的功能很简单,例如,只是支持事情发生变化的概念,但是不能提供更多哪些内容发生了改变。
解决方案
可以使用java.beans 里的PropertyChangeEvent 和 PropertyChangeListener 来代替目前Observer和Observable的功能。
示例public class Demo {
private String name;
private PropertyChangeSupport listeners = new PropertyChangeSupport(this);
public Demo() {
this.name= "my name";
}
public String getName() {
return this.name;
}
public void setName(String name) {
String oldValue = this.name;
this.name= name;
//发布监听事件
firePropertyChange("name", oldValue, demoName);
}
public void addPropertyChangeListener(PropertyChangeListener listener) {
listeners.addPropertyChangeListener(listener);
}
public void removePropertyChangeListener(PropertyChangeListener listener){
listeners.removePropertyChangeListener(listener);
}
protected void firePropertyChange(String prop, Object oldValue, Object newValue) {
listeners.firePropertyChange(prop, oldValue, newValue);
}
}
public class Main {
public static void main(String[] args) {
Demo demo= new Demo();
demo.addPropertyChangeListener(new PropertyChangeListener(){
public void propertyChange(PropertyChangeEvent evt) {
System.out.println("OldValue:"+evt.getOldValue());
System.out.println("NewValue:"+evt.getNewValue());
System.out.println("tPropertyName:"+evt.getPropertyName());
}});
demo.setName("new Name");
}
}
java observable_Java 9:Observer和Observable废弃原因及解决方案相关推荐
- Java内存泄露系列--内存泄露的原因及解决方案(大全)
原文网址:Java内存泄露系列--内存泄露的原因及解决方案(大全)_IT利刃出鞘的博客-CSDN博客 简介 简介 本文介绍Java中内存泄露的一些原因与解决方案. 如果内存泄露的空间足够大,就会导致内 ...
- java.lang.NullPointerException出现的几种原因及解决方案
java.lang.NullPointerException是java编程中最常见的异常之一.任何使用java的人都有在java程序以及java web应用程序中看到java.lang.NullPoi ...
- Java中equals方法造成空指针异常的原因及解决方案
前言 博主最近在做一个项目的调试工作,期间遇到了一个会导致抛出空指针异常的小问题,说它是小问题,是因为真的只是在写代码的时候注意一下就好了,但是这里还要写一个博客,就是为了剖析这个问题,然后给自己做个 ...
- JDK 9中不推荐使用Java的Observer和Observable
在博客文章< 应用JDK 9 @Deprecated增强功能>中 ,我讨论了JDK 9中 @Deprecated批注中对forRemoval()和since()可选元素(方法)的添加 . ...
- JDK 9中已弃用Java的Observer和Observable
在博客文章< 应用JDK 9 @Deprecated增强功能>中 ,我讨论了JDK 9中 @Deprecated批注中对forRemoval()和since()可选元素(方法)的添加 . ...
- java设计模式--观察者模式(Observer)
java设计模式--观察者模式(Observer) java设计模式--观察者模式(Observer) 观察者模式的定义: 定义对象间的一种一对多的依赖关系.当一个对象的状态发生改变时,所有依赖于它的 ...
- Android Observer与Observable
更新时间:2022-01-12 在 Android 上使用 Observer 与 Observable. 示例 1)创建被观察者 MyObservable import java.util.Obser ...
- java.util.NoSuchElementException错误原因及解决方案
java.util.NoSuchElementException错误原因及解决方案 参考文章: (1)java.util.NoSuchElementException错误原因及解决方案 (2)http ...
- 第三次学JAVA再学不好就吃翔(part79)--并发修改异常产生的原因及解决方案
学习笔记,仅供参考,有错必纠 文章目录 集合 并发修改异常产生的原因及解决方案 ConcurrentModificationException 解决方案 集合 并发修改异常产生的原因及解决方案 在这个 ...
最新文章
- 在闲鱼传疯了,某大厂P8面试题库泄漏!
- [Android Pro] ScrollView使用fillViewport设置高度为MatchParent
- “习惯性思维”引起的血案
- 老广: KVM虚拟化学习笔记
- Leetcode 172. 阶乘后的零 解题思路及C++实现
- STL源代码分析(ch2 内存分配)jjalloc.h
- ORACLE TEXT LEXER PREFERENCE(一)
- 如何在SAP云平台上使用MongoDB服务 1
- secureCRT及secureFX安装注册和secureFX中出现中文乱码的处理方式
- pandas (loc、iloc、ix)的区别
- 一个基于verilog的FPGA 的LCD 1602 显示程序
- 简明python教程最新版价格_《简明Python教程》【价格 目录 书评 正版】_中国图书网...
- 《刘毅突破英文词汇3000》Vocabulary fundamental 分课音频 下载
- 关于USB设备芯片型号检测工具
- Unity3D引擎各大插件免费下载地址
- 170716 网线接口顺序
- 『NLP学习笔记』Cross Entropy Loss 的硬截断、软化到 Focal Loss
- 抱怨一下项立刚先生和他的飞象网的博客
- 中国LINUX公社(论坛)
- gradle-6.5-all 快速下载