对匿名类构造函数的方法引用

时间:2014-08-08 16:18:44

标签: lambda java-8 method-reference

是否可以获得对匿名类的构造函数的引用?

例如:

void someMethod(Function<String, SomeInterface> factory)

可以用作:

someMethod(SomeClass::new)

someMethod(str -> new SomeInterface(){...});

在第二种情况下,我使用了lambda表达式,但我想要一个函数引用。

1 个答案:

答案 0 :(得分:3)

不,你不能。

来自java tutorial

  

有四种方法参考:

  • 引用静态方法ContainingClass::staticMethodName
  • 引用特定对象ContainingObject::instanceMethodName
  • 的实例方法
  • 引用特定类型ContainingType::methodName
  • 的任意对象的实例方法
  • 对构造函数ClassName::new
  • 的引用

这些都不与匿名类构造函数匹配。


如果你真的想要一个方法引用,你可以编写另一个方法并引用它:

SomeInterface createSomeInterface(String str) {
    return new SomeInterface(){...};
}

someMethod(this::createSomeInterface);