【问题标题】:get the value in override method using object oriented使用面向对象获取覆盖方法中的值
【发布时间】:2012-10-23 02:07:48
【问题描述】:

这是扩展 CountDownTimer 的类。

public class timer extends CountDownTimer{

private final long startTime = 50000;
private final long interval = 1000;
int timeElapsed;

public timer(long starttime, long interval){
    super(starttime, interval);     
}

@Override
public void onFinish() {        

}

@Override
public void onTick(long millisUntilFinished) {
    timeElapsed = (int)(startTime - millisUntilFinished);       
}   

}

这里是主类。

long millisUntilFinished = 0;
        timer myTime = new timer(5000, 1000);
        myTime.onTick(millisUntilFinished);

        if(myTime.onTick(millisUntilFinished) == 2000){
            //do the next process
        }

这段代码告诉

运算符 == 对于你的类型未定义 void, int

我想如何获取覆盖方法中的 timeElapsed 值,并且该值可以在主类中用于下一个进程。

请帮我解决这个问题。感谢您的提前。

【问题讨论】:

  • myTime.onTick 是一个 void 方法。您不能使用它来分配值,因为它不返回任何内容。为您的属性创建一个吸气剂。
  • FFS 以大写字母开头类名!
  • @Luiggi:他没有给它赋值,但他正在尝试使用 == 运算符将 void 与 int 进行比较,这同样是非法的。
  • @sarah:当发布这样的问题时,不要解释错误消息,因为您遗漏了重要信息。而是发布整个错误消息。
  • @Sara:感谢您的纠正。您的错误消息准确地告诉您您做错了什么。解决方案:不要这样做。仅比较有意义的值。

标签: java oop


【解决方案1】:

void 返回类型表示该方法不返回任何值,因此当您尝试将 void 值与 2000 进行比较时会出现编译器错误。

这里最好的解决方案是简单地创建一个 getter 方法来访问timeElapsed,然后在相等比较中使用该方法。

public class timer extends CountdownTimer {
    ...
    public int getTimeElapsed() {
        return timeElapsed;
    }
    ...
}

然后,在你的 main 方法中,你可以使用那个 getter 方法。

...
if (myTime.getTimeElapsed() == 2000) {
    // do the next process
}
...

【讨论】:

    【解决方案2】:

    您的方法调用 myTime.onTick(millisUntilFinished) 没有返回任何内容,因此出现错误。

    我认为您正在尝试与 timeElapsed 进行比较,您可以按照以下方式进行。

    timer类中添加一个方法getTimeElapsed()为:

       public int getTimeElapsed(){
          return timeElapsed;
       }
    

    然后在你的 main 方法中,你可以这样做:

        long millisUntilFinished = 0;
        timer myTime = new timer(5000, 1000);
        myTime.onTick(millisUntilFinished);
    
        if(myTime.getTimeElapsed() == 2000){
            //do the next process
        }
    

    【讨论】:

    • 如果我这样做,我会返回空值,对吗? timeElapsed 将从覆盖方法中获取。
    • @sarabrown 从onTick() 方法返回空值?如果是这样,您的 if 条件将不被满足。我认为最好从 onTick() 方法返回 timeElapsed 或通过新方法公开它。请注意:如果您打算在 onTick() 方法中添加返回类型,请在超类中也进行更改。
    • 我不是很喜欢 oop,请帮我解决这个问题。我应该在超级方法中添加什么?或者我根本不应该使用超级方法?下一个问题是我扩展了已经是 java 对象的 CountDownTimer,我认为这需要我重写 onTick 方法。这会影响我想做的事情吗?从覆盖方法中获取值?
    • @sarabrown 一次一步。 @override 注释意味着onTick 方法也存在于超类CountDownTimer 中,并且您正在覆盖其在子类中的实现。超类和子类中的方法签名应该匹配。因此我说,如果要添加返回类型,请更新两个类方法。如果您的CountDownTimer 是来自android 的一个,即android.os.CountDownTimer,那么您可以修改该类。在这种情况下,您有两个选择。要么使用我在回答中提到的新方法来获取 timeElapsed,要么使用新方法 onTick 而不覆盖。
    • 对不起,你能用编码解释一下吗?我仍然没有得到它有没有覆盖的新方法。我需要先修改超级,但是如何。我的意思是如果我不重写该方法,可以使用 CountDownTimer 吗?
    猜你喜欢
    • 1970-01-01
    • 2015-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多