为什么Observable在Java8中仍然是一个类?

为什么Observable在Java8中仍然是一个类?,java,java-8,Java,Java 8,相关问题: 既然我们有可以包含默认方法的接口,那么将可观察更改为接口不是更好吗?从功能的角度来看,可观察对象做了一件事,但不是一件事。应该将其更改为Java 8中的接口,对吗 应该将其更改为Java 8中的接口,对吗 除非您想破坏所有向后兼容性,否则不会。如果您将其更改为接口,则任何内容都可以写成: public class Foo extends Observable 会被打破的。我怀疑它在二进制兼容性方面也很可能是无效的,但IMO说,仅仅源代码不兼容就足以使它成为一个不可能的改变 同样地:

相关问题:

既然我们有可以包含默认方法的接口,那么将可观察更改为接口不是更好吗?从功能的角度来看,可观察对象做了一件事,但不是一件事。应该将其更改为Java 8中的接口,对吗

应该将其更改为Java 8中的接口,对吗

除非您想破坏所有向后兼容性,否则不会。如果您将其更改为接口,则任何内容都可以写成:

public class Foo extends Observable
会被打破的。我怀疑它在二进制兼容性方面也很可能是无效的,但IMO说,仅仅源代码不兼容就足以使它成为一个不可能的改变

同样地:

它目前是一个具体的类,而不是一个抽象类。。。所以新的Observable当前是有效的,但不会作为接口 正如您在另一个答案中所说,默认实现使用状态。。。因此,它不能通过接口默认方法实现 应该将其更改为Java 8中的接口,对吗

除非您想破坏所有向后兼容性,否则不会。如果您将其更改为接口,则任何内容都可以写成:

public class Foo extends Observable
会被打破的。我怀疑它在二进制兼容性方面也很可能是无效的,但IMO说,仅仅源代码不兼容就足以使它成为一个不可能的改变

同样地:

它目前是一个具体的类,而不是一个抽象类。。。所以新的Observable当前是有效的,但不会作为接口 正如您在另一个答案中所说,默认实现使用状态。。。因此,它不能通过接口默认方法实现
它将破坏向后兼容性,所有扩展Observable的类都将被破坏

它将破坏向后兼容性,所有扩展Observable的类都将被破坏

我没有对它进行太多的调查,所以没有意识到这一点

即使在Java8中,接口也不能是状态完整的


一个Observable需要一个变更标志和一个观察者数组存储在里面,因此是有状态的,Java 8不支持它。

我没有过多地研究它,所以没有意识到这一点

即使在Java8中,接口也不能是状态完整的


Observable需要一个变更标志和一个观察者数组存储在内部,因此是有状态的,Java 8不支持它。

更重要的是,如果Observable成为一个接口,像new Observable这样的代码也会被破坏。是的,它也破坏了二进制兼容性,类和接口之间的区别也发生在字节码中。@Holger:啊,我还没意识到它已经是一个具体的类了。我认为这是抽象的。我也没有意识到这一点,由于受保护的方法,它几乎没有什么用处,但在相关问题中讨论了这一点,所以我了解到原则上这是可能的,你永远不知道编码人员会做什么。所以很明显,如果没有合理的好处,Oracle不会破坏与模糊代码使用的兼容性。更重要的是,如果Observable成为一个接口,像new Observable这样的代码也会破坏兼容性。是的,它也破坏了二进制兼容性,类和接口之间的区别也发生在字节码中。@Holger:啊,我还没意识到它已经是一个具体的类了。我认为这是抽象的。我也没有意识到这一点,由于受保护的方法,它几乎没有什么用处,但在相关问题中讨论了这一点,所以我了解到原则上这是可能的,你永远不知道编码人员会做什么。因此,很明显,如果没有合理的好处,Oracle即使在代码使用晦涩难懂的情况下也不会破坏兼容性;但是在Java9中,Java.util.Observer和Java.util.Observable都被弃用;但是在Java9中,Java.util.Observer和Java.util.Observable都被弃用。