【发布时间】:2014-08-06 01:50:56
【问题描述】:
因此,例如,当使用不带参数的构造函数构造对象时,该对象能够/“允许”使用类中定义的方法的某个子集,并且当使用不同的方法创建对象时构造函数(例如带有参数)可以/“允许”使用类中定义的方法的不同子集。
这些是浮现在脑海中的概念性解决方案:
在构造函数中使用反射来修改其类方法的可见性/可访问性。 (问题在于EURGH...反射)
在构造函数中设置布尔标志,如
isAllowedToUseMethodA,以识别允许对象使用的方法。 (问题在于布尔检查将施加的开销,并且标记为不可访问的方法仍然对对象可见并且可以尝试执行)
房间里的大象对此的明显答案是“制作 2 个不同的课程。” 我明白,我只是好奇是否有一种优雅的方式如果我想在一个班级中这样做,这样做吗?
【问题讨论】:
-
唯一明智的答案是做大象告诉你的事情。也许“复合模式”是唯一的例外。
-
这天生不优雅。显然,如果你想使用一组方法而不是另一个,那么这两个类就不一样了。他们最多可以共享一个父级。您必须创建 2 个不同的类,如果是这种情况,可能会提取一个通用接口或抽象基。
-
如果你使用前两种方法,你的设计会很糟糕,可能会破坏。
-
使用装饰器模式。不幸的是,这将是 2 个以上的课程
-
这里 cmets 提供的答案比发布的答案更好。
标签: java constructor visibility