在编译匿名scala函数时,有没有办法告诉scala编译器生成私有方法?

时间:2018-08-17 20:22:46

标签: scala java-ee

我在Foo.scala中有此代码

object Foo extends App
{
    def bar() = () => println("hello")
    bar()()
}

如果我运行

scalac Foo.scala

我获得了三个.class文件:

  • Foo $ .class
  • Foo $ delayedInit $ body.class
  • Foo.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类不能同时具有公共和最终方法(必须可以实例化覆盖所有公共方法的子类,创建代理)

0 个答案:

没有答案
相关问题