我在Foo.scala
中有此代码
object Foo extends App
{
def bar() = () => println("hello")
bar()()
}
如果我运行
scalac Foo.scala
我获得了三个.class
文件:
如果可以的话
javap 'Foo$.class'
我上了stdout
Compiled from "Foo.scala"
public final class Foo$ implements scala.App {
public static Foo$ MODULE$;
public static {};
public java.lang.String[] args();
public void delayedInit(scala.Function0<scala.runtime.BoxedUnit>);
public void main(java.lang.String[]);
public long executionStart();
public java.lang.String[] scala$App$$_args();
public void scala$App$$_args_$eq(java.lang.String[]);
public scala.collection.mutable.ListBuffer<scala.Function0<scala.runtime.BoxedUnit>> scala$App$$initCode();
public void scala$App$_setter_$executionStart_$eq(long);
public final void scala$App$_setter_$scala$App$$initCode_$eq(scala.collection.mutable.ListBuffer<scala.Function0<scala.runtime.BoxedUnit>>);
public scala.Function0<scala.runtime.BoxedUnit> bar();
public static final void $anonfun$bar$1();
public final void delayedEndpoint$Foo$1();
}
如您所见,从bar
方法返回的lambda是
编译成public static final void $anonfun$bar$1();
我希望能够将我的Scala代码中使用的所有lambda都编译为私有方法而不是公共方法(当这些函数只是局部方法变量时应该没问题,因为它们只能从内部访问声明它们的方法)。有办法实现吗?
P.S。 我之所以这样问是因为我正在使用Scala创建Java EE的EJB类,并且与无接口视图一起使用的EJB类不能同时具有公共和最终方法(必须可以实例化覆盖所有公共方法的子类,创建代理)