【问题标题】:Passing a method call to a constructor,java将方法调用传递给构造函数,java
【发布时间】:2011-11-27 05:20:45
【问题描述】:

任务: 时间班:

为其设置小时、分钟和秒的 3 个私有数据成员。使用类型 long 或 int。

如果您使用 int,则必须在 ctors 内进行强制转换。

添加一个无参数 ctor,它使用 p38 上的清单 2.6 中的代码来分配值 从当前时间到小时、分钟和秒。

添加另一个 ctor,它将采用一个名为 elapseTime 的长参数(更好 将是 elapsedTime),自 Unix 纪元日期以来的毫秒数。 第二个 ctor 也将使用清单 2.6 中的代码来设置数据成员 自纪元以来经过的时间。

为每个数据成员添加一个 getter。每个 getter 只需要一个语句。

需要获取器,因为数据成员是私有的。

添加一个 toString 方法,该方法返回 Time 对象的小时、分钟和秒。

这是我的类 Time() 代码,我的 setTime() 代码代表上面提到的书籍参考。

包第 10 章;

public class Time {
    private long hour;
    private long minute;
    private long second;

    public Time() {

    }
    public void setTime(long elapsedTime){
       long millisecond = System.currentTimeMillis();
       second = millisecond / 1000;
       minute = second / 60;
       hour = minute /60;
       //equate for current time.
       second = second %60;
       minute = minute %60;
       hour = hour %24;
    }

    public long getHour() {
        return hour;
    }

    public long getMinute() {
        return minute;
    }

    public long getSecond() {
        return second;
    }

    public  String toString(){
       return getHour() + ":" + getMinute() + ":" + getSecond();
   }
}

【问题讨论】:

  • 你的问题目前没有任何意义。 “将方法调用到另一个构造函数中”是什么意思?请说明您要实现的目标,而不是您认为适合实现它的方法...
  • 好吧,我以为我在问我想要实现的目标,我正在尝试将此信息从 setTime() 传递到 Time()
  • 也许在代码中引用 elapsedTime 会让我们看到您想要实现的目标。
  • 好的,为了清楚起见,我将在我的操作中发布分配参数以便更好地理解,我之前发布了另一个关于这个问题的问题,克服了这个障碍(我认为)并且仍然卡住,我将发布我的完整代码也是如此。
  • 我从不指望任何人都可以筛选并为我做这件事,我只是发布了这样的帖子,以便可能提供帮助的人有一个大概的想法

标签: java


【解决方案1】:
public Time() {
    setTime(0L);
}

不过,在构造函数中调用可覆盖的方法是不好的做法。因此,您应该将方法设为私有或最终方法,或者将类本身设为最终方法。

另外,你的方法有点奇怪,因为它需要一个时间作为参数,但对它没有任何作用。

【讨论】:

    【解决方案2】:

    首先,为什么要在同一个类的方法中调用类构造函数?
    问题是,如果您正在访问该类,则应该在之前调用过构造函数,除非您的方法是静态的,例如,您可以这样做:

    public static void setTime(long elapsedTime){
         ...
         new Time(elapsedTime);
         ...
    }
    

    然后从调用部分:

    Time.setTime(1L);
    

    虽然我认为这可以回答您的问题(如果我理解正确的话),但真正的问题是为什么要从方法中调用同一类的构造函数?直接调用构造函数,把方法的所有逻辑都放进去不是更好吗?

    我希望这会有所帮助。

    【讨论】:

    • 感谢您的帮助,如果我对自己的问题不清楚,我很抱歉,我想我也很困惑。
    • 也许你需要的只是一个public Time(long elapsedTime)构造函数?
    • 说它需要是一个无参数的构造函数,这样就行不通了
    • 但它也说你必须添加另一个构造函数:“添加另一个将采用一个名为 elapseTime 的长参数的 ctor”还是我理解错误?
    • 你是对的,但我已经有了那个构造函数 setTime(long elapsedTime)
    猜你喜欢
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-23
    相关资源
    最近更新 更多