在Java中,可以创建包私有接口。用javap看着它们,你会发现它们缺乏“公共”的可见性。
在Scala中,您可以将特征声明为私有[package]或protected [package],但是在使用javap时,它仍然是公共的。
那么如何在Scala中创建一个包私有特征?
虽然Scala编译器尊重可见性,但我的问题是我的API也可能从Java访问,我不希望将我的内部实现暴露给Java。
答案 0 :(得分:13)
我相信这是你问题的答案
http://www.scala-lang.org/node/10488
私人在两者的语言规范中都有微妙的特殊地位 Scala和Java。查看私人与合格的讨论 在SLS的Modifiers部分中为private。简而言之,私人就是 与Java私有相同,而私有[foo]未标记为私有 字节码,但只是涉及编译时访问检查。
我不相信你可以在编译成字节码后真正让trait包私有。
答案 1 :(得分:10)
使用Scala创建Java包私有修饰符是不可能的。 但是,您可以在Scala项目中自由混合Java和Scala文件。所以最简单的解决方案是创建一个Java类/接口,然后在Scala中扩展它。