scala - 有没有办法告诉 scala 编译器在编译匿名 scala 函数时生成私有方法?
问题描述
我有这个代码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'
我上了标准输出
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 编译为私有方法而不是公共方法(当这些函数不应该成为问题只是局部方法变量,因为它们只能从声明它们的方法中访问)。有没有办法做到这一点?
PS我问是因为我正在使用Scala创建Java EE的EJB类,而与无接口视图一起使用的EJB类不能具有公共和最终的方法(必须可以实例化一个覆盖所有公共方法的子类创建代理)
解决方案
推荐阅读
- php - 升级 PHP 到 7.4 并没有找到 PDO
- sql - 表作为参数类型不正确
- ruby-on-rails - 如何修复警告 i18n spree?
- php - 用 mysqli_query 的结果替换数组中的值
- reactjs - 材质 UI 弹出框不适用于反应类组件
- android - 处理recyclerview适配器(Kotlin)中的按钮点击?
- google-sheets - 如何使用 Google Sheets API v4 获取超链接
- swift - 基本身份验证在 Alamofire Swift 中不起作用
- python - Discord Python bot - 协程从未等待
- r - 当子向量长度为偶数或奇数时,将向量拆分为相等重叠的子向量长度