Scala Singleton对象

时间:2014-02-06 13:47:14

标签: java scala

我有以下问题:

  

定义一个扩展java.awt.Point的Origin对象。为什么不这样做   其实是个好主意? (仔细看看Point的方法   类。)

     

import java.awt.Point

     

对象Origin扩展Point {}

但我真的不知道为什么扩展这个课程不是一个好主意。有人可以开导我吗?

1 个答案:

答案 0 :(得分:2)

Java Point的“合同”在这里:http://docs.oracle.com/javase/7/docs/api/java/awt/Point.html。如@Jesper所述,Point被设计为可变的,并且具有setLocation(<overloaded>)之类的变换器。鉴于此信息,这里使用它并使用它的缺点是:

  • 这是一个可变对象,即使在Java中也是要避免的事情。
  • 当你像这样object Origin extends Point { }创建Point的单例时,你只能在整个应用程序中拥有一个Origin对象(不会谈论类加载器及其范围)。
  • 如果您的目的是只有一个Origin对象,那么您仍然应该保护自己免受Point附带的可变性。否则你会让任何人改变原点。

我希望你现在看到这个矛盾:一方面如果你想在应用程序中有一个单一的起源并能够推理它,你会希望你的起源永远不会改变(不可变)。另一方面,如果你不想拥有单一的原点,那么创建一个单例根本就没有用。