使用UUID :: toString的“不能从静态上下文中引用非静态方法”,但不适用于Object :: toString

时间:2018-08-21 22:34:07

标签: java intellij-idea

关于此错误,有很多问题,但找不到针对这种特殊情况的答案。有了这个界面:

interface Converter<IN, OUT> {
  OUT convert(IN in);
}

这种方法:

public Converter<?, String> converter(java.lang.reflect.Type type) {
  if (type == UUID.class) {
    return <X>;
  }
}

在X上使用UUID::toString时,出现“无法引用”错误。但是使用Object::toString,我不会。这是在IntelliJ IDEA 2018.2.1中。

我想问题是,Object::toString为什么起作用?那也不带参数,那么它如何实现带参数的接口方法呢?


[edit]我发现这可行:

public Converter<UUID, String> converter(java.lang.reflect.Type type) {
  return UUID::toString;
}

是的,这与类型推断有关。在那种情况下,“非静态方法”消息可能有点像鲱鱼吗?

0 个答案:

没有答案