1

以下 java 代码在 Eclipse 中以红色突出显示,但编译良好。IDE错误是:

类型不匹配,无法从类型Optional<Runnable>转换 Optional<new Runnable>

从推断的泛型来看,编译器应该没问题,但我的 IDE 失败了。Eclipse 中某处是否存在不正确的设置?

Optional<Runnable> o;

o = Optional.of(new Runnable() {
  @Override
  public void run() {

  }
});
4

3 回答 3

1

这应该是:

Optional <Runnable> o;

o = Optional.<Runnable>of (new Runnable () {
    @Override
    public void run () {
        /* your code here */
    }
});
于 2013-02-12T06:45:07.030 回答
1

在 Eclipse 下启用 Java 7 后,需要两行代码来处理您的语法:

Runnable t = new Runnable(){@Override public void run() {/**/}};
Optional< Runnable > o = Optional.of( t );
于 2013-02-12T07:00:02.270 回答
0

正如其他人指出的那样,两行或 Optional.<Optional>of() 是必要的。

javac (jdk 1.7) 失败:

错误:不兼容的类型
  o = Optional.of(new Runnable() {
                 ^
  必需:可选<Runnable>
  发现:可选<<匿名可运行>>
1 个错误

javac (jdk 1.6) 也失败了:

不兼容的类型
发现:可选<<匿名 java.lang.Runnable>>
必需:可选<java.lang.Runnable>
  o = Optional.of(new Runnable() {
                 ^
1 个错误

所以这似乎是定义的 Java 行为,但不知道为什么。

于 2013-02-12T07:13:16.707 回答