我正在为我的应用程序构建一个 API,作为模型和控制器之间的中间层。该模型包含所有数据和低级功能。我为 API 创建了一个新类,它使用该模型,但使用户更容易,并且不允许用户直接访问数据。
现在,我想阻止用户访问模型并让他只使用 API 中的函数。
我怎么做?
据我所知,这可以通过指定方法或变量是private
or来简单地完成public
。问题是我有很多static
全局数据字段。我可以限制对静态字段的访问,以便只有 API 的私有函数可以访问它们吗?
我正在为我的应用程序构建一个 API,作为模型和控制器之间的中间层。该模型包含所有数据和低级功能。我为 API 创建了一个新类,它使用该模型,但使用户更容易,并且不允许用户直接访问数据。
现在,我想阻止用户访问模型并让他只使用 API 中的函数。
我怎么做?
据我所知,这可以通过指定方法或变量是private
or来简单地完成public
。问题是我有很多static
全局数据字段。我可以限制对静态字段的访问,以便只有 API 的私有函数可以访问它们吗?
在类中创建private static
字段将确保只有该类中的函数才能访问这些字段。此外,如果类被重新实例化(又名new myClass();
),这些字段将不会被重新创建;对于 myClass 的所有实例,它们的值将保持不变并且是全局的。
除了已经发布的答案:
这取决于“限制对静态字段的访问”的含义:
如果你想防止其他人不经意间直接使用它们,请使用“private”修饰符。但是请记住,如果没有其他对策已经到位,人们仍然可以通过反射访问它们。
如果您不密封包,这也适用于“静态 int foo”情况,因为人们可以轻松地将另一个类放入将再次访问的同一包中。
如果您正在构建 API,也许您想阅读Practical API Design, Confessions of a Java Framework Architect 一书。
方法比字段好 使用方法(通常是 getter 和 setter)来访问字段比直接公开字段要好。
工厂优于构造器 当您公开工厂方法而不是构造器时,您可以促进 API 的未来发展。
Make Everything Final为了未来的发展,最好禁止子类化……让你的类最终化。
...