如何在Scala中定义package-private * trait *?

时间:2011-08-23 20:48:48

标签: scala private traits

在Java中,可以创建包私有接口。用javap看着它们,你会发现它们缺乏“公共”的可见性。

在Scala中,您可以将特征声明为私有[package]或protected [package],但是在使用javap时,它仍然是公共的。

那么如何在Scala中创建一个包私有特征?

虽然Scala编译器尊重可见性,但我的问题是我的API也可能从Java访问,我不希望将我的内部实现暴露给Java。

2 个答案:

答案 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中扩展它。