当前位置: 首页 > 面试题库 >

抽象类NumberFormat-对getInstance()非常困惑

公羊浩气
2023-03-14
问题内容

我是Java的新手,我有一个初学者的问题:

NumberFormat是一个抽象类,因此我假设我无法创建它的实例。但是有一个公共静态(工厂?)方法getInstance()可以让我做

NumberFormat nf = NumberFormat.getInstance();

我很困惑。如果有人可以给我提示,我将很高兴:

  1. 如果有一个公共方法获取此抽象类的实例,为什么我们也没有构造函数?
  2. 这是一个抽象类; 我们怎么有这个静态方法给我们一个类的实例?
  3. 为什么选择这样的设计?如果我假设有可能有一个抽象类的实例(???),那么我根本不知道为什么该类应该是抽象的。

谢谢。


问题答案:
  1. 该类是抽象的,因为它是Java中每种数字格式的基类(DecimalFormat例如,包括)。拥有一个本质上未知的数字格式的构造函数是毫无用处的。
  2. getInstance()方法是所谓的工厂方法。它返回当前语言环境的匹配数字格式。由于尚不知道在编译时需要哪种子类,因此它返回a NumberFormat,但是 实例 本身显然是子类型的(因为您无法创建抽象类的实例)。
  3. 这种设计使您能够灵活 地以某种方式 确定适当的子类实例,以在运行时返回,而不必在设计/编译时使设计过于僵化。静态方法免于抽象,因此类可以作为工厂 抽象超类用于具体实现。如果不是这种情况,您可能会有一个NumberFormatFactory可以使用工厂方法的地方。


 类似资料:
  • 这似乎是一个基本问题。但在采访前需要澄清。 我在抽象类中有一个非抽象方法。它的具体类重写了该方法。但我想调用父类的原始方法来调用,而不是重写方法。有什么办法吗? 据我所知,没有办法调用原始方法?

  • java.text.NumberFormat类用于根据特定的Locale格式化数字和货币。 数字格式因国家/地区而异。 例如,在丹麦,使用逗号将数字的分数与整数部分分开,而在英格兰,它们使用点作为分隔符。 示例 - 格式编号 在此示例中,我们根据美国语言环境和丹麦语区域设置格式化数字。 IOTester.java import java.text.NumberFormat; import java

  • 我正在尝试对扩展抽象基的类进行单元测试。以下是“类似的类”,以供说明: 下面是我正在尝试的单元测试: 当我做这个测试的时候 java.lang.NullPointerException 在中 我知道自动连线的“滤水器”没有初始化。但接下来,我只想在我的单元测试中模拟抽象的“非抽象”方法。 我该如何使用EasyMock来实现这一点呢?另外,我不知道和应该做什么。

  • 我有一个子类,它声明了我的抽象超类中的所有方法,但它仍然给我一个错误,说明我的类不是抽象的。我不知道为什么会抛出这个错误。 我得到的具体错误是 PhoneBookEntry.java: 1:错误:PhoneBookEntry不是抽象的,并且不会覆盖可比中的抽象方法compareTo(Object) 我的问题代码: 还有我的子类:

  • 我目前正在尝试使用JaxB,但对于一个相对简单的示例,我并不是很成功。我的示例如下: 我所有的尝试(甚至编组)都失败了。我浏览了BlaiseDoughan的博客,包括http://blog.bdoughan.com/2010/11/jaxb-and-inheritance-using-xsitype.html但他们似乎对我的例子都没有帮助。我很可能误用了他的例子。在我看来,我的示例应该是JaxB中

  • 是否有任何JAXB绑定可以告诉JAXB代码生成器将Java类生成为,而不必在XSD中将相应的XML类型标记为? 情况如下: > 我在xsd中定义架构: 我使用内联JAXB绑定(“inline”==“直接在模式中”)来指示应该生成JAXB类的包(): 我使用内联JAXB绑定为我的每个复杂类型(在本例中、和)指示实现类的名称: 我从模式生成JAXB类。这导致: 我自己编写类: 使用这两个类层次结构这样