【问题标题】:can i @Override an android method to change the parameter types?我可以@Override 一个 android 方法来更改参数类型吗?
【发布时间】:2011-09-02 22:55:42
【问题描述】:

这是代码最初的样子:

@Override
public void onProgressChanged (SeekBar seekBar, int progress, boolean fromUser){
    ...
}

我需要它是这样的:

@Override
public void onProgressChanged (SeekBar seekBar, float progress, boolean fromUser){
    ...
}

但是,当我将 int 更改为 float 时,我收到一条错误消息,指出 The method onProgressChanged(SeekBar, float, boolean) of type new SeekBar.OnSeekBarChangeListener(){} must override or implement a supertype method

有谁知道我如何做到这一点?

【问题讨论】:

    标签: android methods overriding


    【解决方案1】:

    不,您不能更改覆盖方法中的类型。

    如果您需要浮点数,您可以传递乘以例如 100 的 int 数,在您的实现中只需将其除以 100。

    @Override
    public void onProgressChanged (SeekBar seekBar, int progress, boolean fromUser){
        float floatProgress = (float)progress/100f;
        ...
    }
    

    如果不是,则直接转换为 int

    float progress = 99.0;
    onProgressChanged(seekBar, (int)progress, fromUser);
    

    【讨论】:

      【解决方案2】:

      您无法更改类型。编译器将您的方法 (SeekBar, float, boolean) 理解为与 (SeekBar, int, boolean) 完全不同的方法。

      它给出的错误指导您实现基类/接口中定义的缺失方法。

      您可以(但要小心)更改您的类实现的原始接口以包含 (SeekBar, float, boolean) -方法。或者你可以完全定义一个不同的接口。

      【讨论】:

        【解决方案3】:

        您不能这样做 - 当您更改参数类型时,您不再覆盖相同的方法 - 您正在重载它。您可以在调用onProgressChanged 之前将float 转换为int

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-21
          • 2012-10-29
          • 2015-10-01
          相关资源
          最近更新 更多