当前位置: 首页 > 知识库问答 >
问题:

如何使用实现[重复]将函数添加到类中

申屠森
2023-03-14

如何在下面的代码中使用setter?

public class SignalRunnable implements Runnable {

    private final int x;
    private short[] s;

    public SignalRunnable(int _x) {
        this.x = _x;
    }

    public void setS(short[] _s) {
        this.s = _s;
    }

    @Override
    public void run() {
        // DO STUFF here
    }
}

我已经尝试了下面的方法来使用我的类,但得到了一个无法解决的方法错误。

    // Create the runnable/task to repeat.
    Runnable runnable = new SignalRunnable(x);

    // Cannot resolve method error here.
    runnable.setS(s);

共有2个答案

严书
2023-03-14

您应该记住Liskov替换原则规定的一个非常重要的设计原则:

API(即可访问的,通常称为public),可在引用变量上使用,由变量的类型决定和投影,而不是由实际对象的类型决定和投影,变量存储引用。变量的类型是它声明的任何内容,而不是它引用的内容。

在以下情况下:

SuperType obj = new SubType();

obj只允许您访问在超类型中声明的成员(包括从其超类型隐式或显式继承的任何内容)。

喻嘉泽
2023-03-14

变量的类型为可运行:

Runnable runnable = ...

并且,Runnable没有名为集的方法。这是您的SignalRunnable类上的自定义方法。将您的变量设置为该类型:

SignalRunnable runnable = new SignalRunnable(x);
runnable.setS(s);

您仍然可以将SignalRunnable实例添加到Runnable集合中,将其传递给期望Runnable的方法等。

 类似资料:
  • 我有一个使用lombok的类,如上所示,其中每个字段都是私有的和最终的。现在,我希望为设置一个setter,但这个setter不起作用,因为是final。我在这儿该怎么办?

  • 问题内容: 我想使两个按钮看起来像按钮。只有当我使用actionlink的#ID来应用时,我才能实现此目的。我想为操作链接分配一个类,但是当我使用下面的代码时,出现一个错误,提示我缺少“}”。 这是我正在应用的样式: 这可行,我想我可以将另一个#ID添加到样式中,但想将样式应用于Class。 问题答案: 您必须使用字符,因为class是C#中的关键字。这是MSDN文档的链接

  • 有这样的东西: 工作正常/图像正常上载comment.php。 下面是相同的表单,但使用了jquery Post。工作正常,但javascript看不到图像... 有什么方法可以在脚本中添加一些我的comment.php会看到的图像吗?

  • 我在Google BigQuery中有一个表,它由几个字段组成,然后是一个可能包含一个或多个对象的重复记录。我想在重复数据中创建一个新表,其中包含一个额外字段,并将原始数据复制到新表中,用GENERATE_UUID()的输出填充新字段,以便每个重复数据行都有一个唯一标识符。 我有一个类似的问题,当目标包含重复字段时,如何从一个BigQuery表复制到另一个?但我不知道如何调整它以适应我当前的用例。

  • 问题内容: 我有一个特定的类C的arraylist。 C类具有两个属性,即。 现在,当我将C类型的对象添加到ArrayList myList时,我想检查列表中是否已经存在对象,且其str1和str2的值与该对象的参数值(str1和str2)相匹配我要补充。 有什么有效的方法可以执行此操作,而不必每次都遍历完整列表并检查参数之间是否匹配? 问题答案: 您需要重写C类中的方法。 例如 然后,可以调用m

  • 我在做一件简单的事情,想不出该怎么做。我有一个使用方法的ArrayList,我想立即将结果添加到一个新的ArrayList中。 所以我想做类似的操作,但这不是正确的方法。 对我的代码的任何其他部分的PS建议也会很感激。谢谢!