Java 那么';当您能够';不要改变等级';s run()函数?

Java 那么';当您能够';不要改变等级';s run()函数?,java,methods,Java,Methods,我有一个按钮类,我试图使用Runnable和Thread或Executor实现某种“点击”支持。但是,我看到的每个教程都没有告诉您如何为类的每个实例更改run()方法。类的run()函数在实现时似乎是不变的。我能做的最好的事情就是扩展按钮,对于每个我希望按钮做一些稍微不同的事情的实例,例如,我将有一个名为的类,名为thatonebuttonthattsinetweethestartsound,依此类推。阅读Javadoc for Runnable,这正是Runnable帮助您避免的。我错过什么了

我有一个
按钮
类,我试图使用Runnable和Thread或Executor实现某种“点击”支持。但是,我看到的每个教程都没有告诉您如何为类的每个实例更改run()方法。类的run()函数在实现时似乎是不变的。我能做的最好的事情就是扩展
按钮
,对于每个我希望按钮做一些稍微不同的事情的实例,例如,我将有一个名为
的类,名为thatonebuttonthattsinetweethestartsound
,依此类推。阅读Javadoc for Runnable,这正是Runnable帮助您避免的。我错过什么了吗?如何使同一类的实例具有不同的run()函数?如果这是不可能的,还有其他选择吗

谢谢你的帮助


编辑:如果有帮助的话,我正在使用LibGDX。

您可以在Button类的构造函数中传递Runnable,如下所示:

public Button(Runnable onClick) {
    this.onClick = onClick;
}
然后,您可以在检测到单击时调用该Runnable:

this.onClick.run();
您还可以在单独的方法中传递Runnable,如
setOnClickListener

另一方面,您不应该对这些用例真正使用Runnable,因为它们被设计为在不同的线程上运行,并且不允许传递参数,这在click侦听器中可能非常有用。使用只有一个方法的接口,可以在其中传递参数

interface MyClickListener {
    void onClick(/* your arguments here */);
}

您可以在Button类的构造函数中传递Runnable,如下所示:

public Button(Runnable onClick) {
    this.onClick = onClick;
}
然后,您可以在检测到单击时调用该Runnable:

this.onClick.run();
您还可以在单独的方法中传递Runnable,如
setOnClickListener

另一方面,您不应该对这些用例真正使用Runnable,因为它们被设计为在不同的线程上运行,并且不允许传递参数,这在click侦听器中可能非常有用。使用只有一个方法的接口,可以在其中传递参数

interface MyClickListener {
    void onClick(/* your arguments here */);
}

为什么要更改每个实例的run方法?您是在谈论
java.awt.Button
还是其他的
Button
类?为什么希望相同的代码在另一个实例中表现不同?我不确定您是否在寻找if/else或某种类型的继承,或者其他类型的继承。我希望您在按钮中添加一个侦听器来描述其行为。请记住,Runnable是一个功能接口,因此任何没有参数和返回类型的方法都可以用作Runnable。除了注入Runnable外,您还可以在每个实例上重写onClick方法,这实际上是惯用的java,也是匿名内部类的全部要点。为什么您要更改每个实例的运行方法?您是在谈论
java.awt.Button
还是其他
Button
类?为什么您希望相同的代码在另一个实例中表现不同?我不确定您是否在寻找if/else或某种类型的继承,或者其他类型的继承。我希望您在按钮中添加一个侦听器来描述其行为。请记住,Runnable是一个功能接口,因此任何没有参数和返回类型的方法都可以用作Runnable。除了注入Runnable之外,您还可以在每个实例上重写onClick方法,这实际上是惯用的java,这就是匿名内部类的全部要点。解决方案似乎很简单,但我想我对初始化有点困惑,因为
Runnable
是一个接口而不是类。我想我还有很多东西要学。。。谢谢没问题,每个人都是初学者!如果你有更多的问题,请随时给我留言。好的。解决方案似乎很简单,但我想我对初始化有点困惑,因为
Runnable
是一个接口而不是类。我想我还有很多东西要学。。。谢谢没问题,每个人都是初学者!如果您有更多问题,请随时给我留言。