不可能使内部对象的方法对外部私有
在下面的示例中,我无法隐藏update
以防止公开曝光:
trait Order {
sealed trait EntryOption {
private[Order] def update(e: EntryOption): Unit
}
private case object EmptyEntry extends EntryOption {
def update(e: EntryOption) = ()
}
trait Entry extends EntryOption
def test(a: Entry, b: EntryOption): Unit = a.update(b)
}
它无法编译“错误:对象创建不可能,因为方法$line12$$read$Order$^类型为 (e: Order.this.EntryOption)Unit 的特征 EntryOption 中的日期未定义
”——无论它应该是什么(编译器错误?)。我尝试了以下操作,但没有成功:
- 还在
EmptyEntry
private[Order]
中进行update
- 使其
protected
– 这会破坏方法test
目标是使 EntryOption
的 update
无法从外部 Order
访问。
编辑
如果我暂时将trait Order
更改为object Order
,它会编译,这表明存在潜在的编译器错误?
In the following example, I can't get to hide update
from public exposure:
trait Order {
sealed trait EntryOption {
private[Order] def update(e: EntryOption): Unit
}
private case object EmptyEntry extends EntryOption {
def update(e: EntryOption) = ()
}
trait Entry extends EntryOption
def test(a: Entry, b: EntryOption): Unit = a.update(b)
}
It fails to compile with "error: object creation impossible, since method $line12$$read$Order$^date in trait EntryOption of type (e: Order.this.EntryOption)Unit is not defined
" – whatever that is supposed to be (compiler bug?). I tried the following without success:
- Also make
update
inEmptyEntry
private[Order]
- Make it
protected
– this breaks methodtest
The goal is to have EntryOption
's update
inaccessible from outside Order
.
EDIT
If I tentatively change trait Order
to object Order
it compiles, indicating a potential compiler bug?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
一个愚蠢的解决方法:
我应该提交错误吗?
A stupid work-around:
Should I file a bug?