我在课堂下面的公共方法很少。
public class Sample{
public void method1(){ }
public void method2(){ }
public void method3(){ }
public void method4(){ }
}
我只需要向客户端公开前三种方法,而不是method4()
。如何创建一个仅暴露前3种方法的类?
答案 0 :(得分:2)
创建一个只暴露3种方法的接口:
public interface ISample{
public void method1();
public void method2();
public void method3();
}
让课程实现它:
public class Sample implement ISample {
// all method definitions are not changed
}
当您需要完全访问权限时,请使用Sample
类型,限制时使用ISample
:
Sample sample=new Sample();
sample.method4();
passToUser((ISample)sample);
答案 1 :(得分:1)
要创建仅提供方法1-3的公共类,请将Sample
包装在另一个类中,如下所示:
public class RestrictedSample {
private Sample sample = new Sample();
public void method1(){ sample.method1(); }
public void method2(){ sample.method2(); }
public void method3(){ sample.method3(); }
}
这称为façade pattern,或简称为delegation。
警告:只要Sample
仍然公开,其他代码就可以构造该类的实例。这对你来说可能不是问题,但值得记住。
答案 2 :(得分:0)
更好地控制可见性范围是OSGi为Java添加的主要内容之一。如果这是一个严肃的项目,您可能需要考虑投资学习OSGi。
如果这只是你为自己或课堂所做的事情,你可能想要考虑一些更弱但更简单的东西,例如标记方法已弃用或只是将其重命名为INTERNAL_USE_ONLY_method4。
或者将该方法保留为“包”访问权限。