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

Java设计问题:强制方法调用序列

司徒博容
2023-03-14
问题内容

最近有一次采访中我问了一个问题。

问题 :有一个用于描述代码执行时间的类。该类就像:

Class StopWatch {

    long startTime;
    long stopTime;

    void start() {// set startTime}
    void stop() { // set stopTime}
    long getTime() {// return difference}

}

期望客户端创建StopWatch的实例并相应地调用方法。用户代码可能会使方法的使用混乱,从而导致意外结果。Ex,start(),stop()和getTime()调用应该有序。

此类必须“重新配置”,以便可以防止用户弄乱序列。

我建议如果在start()之前调用stop()或进行一些if / else检查,但是访问者不满意,则使用自定义异常。

是否有一种设计模式可以处理这种情况?

编辑 :可以修改类成员和方法的实现。


问题答案:

我们通常使用来自Apache Commons
StopWatch的StopWatch来
检查模式的提供方式。

当秒表状态错误时,将抛出IllegalStateException。

public void stop()

Stop the stopwatch.

This method ends a new timing session, allowing the time to be retrieved.

Throws:
    IllegalStateException - if the StopWatch is not running.

直截了当。



 类似资料:
  • 问题内容: 下面的代码在运行时显然会打印出“ B1 / A2 / B2”。现在,是否可以改为打印“ A1 / A2 / B2”(即A#method2()应该在A而不是B上调用method1())? 注意:我不需要获得传递多态性,这个问题仅出于好奇。 问题答案: 是的,您可以做到。在包 a中 定义A : 在包 b中 定义B : 将测试放入软件包 a中 并运行它。结果是A1 / A2 / B2。当然这

  • 我创建了一个类,该类旨在获取2个分数,每个分数都有一个分子和分母,然后将它们相加,输出另一个分数。 当我编译程序时,我遇到了一个问题,涉及: 分数F3=新分数。添加(F1、F2);在主要方法中 错误:找不到类型分数$add 如果我将所有内容都设置为一个类,那么程序将运行,但我希望所有方法都严格位于Fraction类中,并在UseFraction类中调用Fraction。

  • 这是一个相当初级的问题,但我对此有点犹豫不决。假设我有一个类a,它有方法method1、method2、method3、method4和一个main方法。 method2仅由Method1调用;method4仅由Method3调用。 解决方案说从main调用method1,从main调用method2,与method3和4相同。 所以让main方法显式调用method1和method2不是很糟糕吗

  • 问题内容: 我尝试在Android NDK上工作,我的第一个测试不是很确定,我需要帮助,因为我看不到错误在哪里。 以下代码可以毫无问题地进行编译,但是当在模拟器上运行时,该程序将返回SIGSEGV信号,并且在logcat中不会显式写入任何错误。但是,将显示一条警告,指出未找到Java类。经过一天的研究,这个问题看起来一切正确。 这是我的Java代码:JNITestActivity.java 这是我

  • 问题内容: 我正在尝试将一些简单的图形绘制到框架上。我还希望能够从主要方法中调整要绘制的内容。例如,设置要打印的String变量或矩形的坐标。 我似乎遇到的问题是,可以在设置类变量之前调用该方法。如何在绘制到屏幕之前更改此代码以设置/ 变量? 谢谢 问题答案: 从FrameTest类中删除test_string。使用set方法直接设置test_string。参见示例:

  • 问题内容: 您如何处理在Java中仅具有单一继承的问题?这是我的具体问题: 我有三个(简化的)课程: 这是我认为最基本的实现,但是我想进行其他实现。 可以说我想添加一个新的变量,比如wordLength,但是我想使用继承来添加它。意思是我不想修改那个原始的AbstractWord类。即与此类似: 我知道java不允许我这样做,但是它使我的代码非常难看。现在,每当我添加一个字段时,我都将其添加到Ab