【发布时间】:2018-01-23 23:37:36
【问题描述】:
我正在重构我前一段时间从事的一个 SWT 项目,我想使用 Java 8,现在在当前版本中,我有这样的东西:
Runnable runnable = new Runnable() {
public void run() {
// do some stuff...
Display.getCurrent().timerExec(1000, this);
}
};
Display.getCurrent().timerExec(1000, runnable);
我正在尝试使用 Java 8,如下所示:
Runnable runnable2 = () -> {
// do some stuff...
Display.getCurrent().timerExec(1000, this);
};
Display.getCurrent().timerExec(1000, runnable2);
问题出在:
Display.getCurrent().timerExec(1000, this);
第一个代码(不是Java 8)中的“this”是指可运行对象,第二个是指主类,实际上我在编译时得到的错误如下:
Display类型中的timerExec(int, Runnable)方法不是 适用于参数(int,MainClass)
如何解决这个问题,以便执行计时器?
编辑: 查看 StackOverflow 以前的问题,我发现:Lambda this reference in java
似乎无法在 lambda 中引用“this”,所以我不能将 SWT 计时器与 lambda 一起使用?有解决办法吗?
【问题讨论】:
-
我能想到一个 hack,但它并没有真正节省那么多代码(这似乎是首先使用 lambda 的重点?),并且使用匿名类是更清楚地传达你正在做的任何方式。
-
Jorn,是的,我知道,在可运行文件中,我还有其他使用 lambda 的代码,如果可能的话,我希望所有内容都对齐。现在我很好奇,您能否提供破解以了解任何可能性?
-
这个:ideone.com/FKNRJR 但是现在我再看一遍,它实际上使用了几个更多个字符。
-
谢谢,但我觉得它真的很难看...