RFR(s): 8154801 deprecate java.util.Observable/Observer
joe darcy
joe.darcy at oracle.com
Fri Apr 22 03:11:53 UTC 2016
Looks good Stuart; thanks,
-Joe
On 4/21/2016 7:17 PM, Stuart Marks wrote:
> Hi all,
>
> Here's a small proposal to deprecate the java.util.Observable and
> Observer. This deprecation will not be for removal.
>
> See https://bugs.openjdk.java.net/browse/JDK-8154801 for some background.
>
> Essentially, these classes are a very thin implementation of the
> Observer pattern. These classes provide little beyond maintaining a
> list of callbacks plus the ability calling them upon request. A 1999
> comment from Josh Bloch in a related bug report said that they are no
> longer under active development and have been superseded by the 1.1
> Beans/AWT event model.
>
> Their only use in the JDK is in the Hotspot Serviceability Agent,
> which doesn't even use Observable, and which uses Observer as a
> callback interface. SA's use of Observer could easily be replaced with
> lambdas and Consumer<TypeDataBase>.
>
> There is some use of these classes "in the wild" but only for
> conventional callback purposes. Deprecation will generate warnings if
> that code is recompiled with deprecation warnings enabled.
>
> Diffs follow.
>
> Thanks,
>
> s'marks
>
>
>
> diff -r 92280897299f -r e16d8d56da15
> src/java.base/share/classes/java/util/Observable.java
> --- a/src/java.base/share/classes/java/util/Observable.java Mon Apr
> 18 14:10:14 2016 -0700
> +++ b/src/java.base/share/classes/java/util/Observable.java Thu Apr
> 21 15:48:23 2016 -0700
> @@ -58,7 +58,19 @@
> * @see java.util.Observer
> * @see java.util.Observer#update(java.util.Observable,
> java.lang.Object)
> * @since 1.0
> + *
> + * @deprecated
> + * This class and the {@link Observer} interface have been deprecated.
> + * The event model supported by {@code Observer} and {@code Observable}
> + * is quite limited, the order of notifications delivered by
> + * {@code Observable} is unspecified, and state changes are not in
> + * one-for-one correspondence with notifications.
> + * For a richer event model, consider using the
> + * {@link java.beans} package. For reliable and ordered
> + * messaging among threads, consider using one of the concurrent data
> + * structures in the {@link java.util.concurrent} package.
> */
> + at Deprecated(since="9")
> public class Observable {
> private boolean changed = false;
> private Vector<Observer> obs;
> diff -r 92280897299f -r e16d8d56da15
> src/java.base/share/classes/java/util/Observer.java
> --- a/src/java.base/share/classes/java/util/Observer.java Mon Apr
> 18 14:10:14 2016 -0700
> +++ b/src/java.base/share/classes/java/util/Observer.java Thu Apr
> 21 15:48:23 2016 -0700
> @@ -31,7 +31,12 @@
> * @author Chris Warth
> * @see java.util.Observable
> * @since 1.0
> + *
> + * @deprecated
> + * This interface has been deprecated. See the {@link Observable}
> + * class for further information.
> */
> + at Deprecated(since="9")
> public interface Observer {
> /**
> * This method is called whenever the observed object is changed. An
>
>
More information about the core-libs-dev
mailing list