bil*_*.cn 9 java lambda java-8 java-stream
StaticClass::new给定外部类实例的内部类是否有相同的东西?
编辑:
即如果我有
class Outer {
class Inner {
}
}
Run Code Online (Sandbox Code Playgroud)
我可以Outer o = new Outer(); Inner i = o.new Inner()用旧Java 做.如何表达o.new Inner()as函数引用.
Kon*_*kov 10
根据Oracle教程,有四种方法引用:
ContainingClass::staticMethodNamecontainingObject::instanceMethodNameContainingType::methodNameClassName::new未列出对本地/嵌套类的引用,因此我认为它不受支持.
您可以使用它java.util.function.Supplier来触发lambdas的使用,以获取嵌套类的实例:
Outer outer = new Outer();
Supplier<Outer.Inner> supplier = () -> outer.new Inner();
Run Code Online (Sandbox Code Playgroud)
该章节15.13.方法参考 JLS中的表达式包含一个有点神秘的声明:
这基本上意味着,一个方法参照的内部类的构造是可能的在外部类的方法,如在此实例中
import java.util.function.Supplier;
class Outer
{
public class Inner
{
}
void example()
{
Supplier<Inner> s = Inner::new;
}
}
Run Code Online (Sandbox Code Playgroud)
但是JLS没有提到任何替代方案,因此必须假设根本不可能以任何其他形式提供封闭实例this.