2013-06-11 124 views
0

我正在为我的应用程序构建一个API,作为模型和控制器之间的中间层。 该模型包含所有数据和低级功能。我为API创建了一个新的类,它使用模型,但让用户更容易,并且不让用户直接访问数据。编译Java文件

现在,我想阻止用户访问模型,并让他只使用API​​中的函数。

我该怎么做?

据我所知,这可以简单地通过指定方法或变量是private还是public来完成。问题是我有很多全球数据的static字段。我可以限制访问静态字段,以便只有API的私有功能才能访问它们吗?

+2

只设置字段作为私有静态 – fmodos

+2

如果你离开了访问修饰符,这使得该领域唯一的包内访问,这可能是你在找什么 –

+0

@DavidChristo什么你的意思是“忽略访问修饰符”? –

回答

1

在类中创建一个private static字段将确保只有该类中的函数才能访问这些字段。此外,如果该类被重新实例化(又名new myClass();),那些字段将不会被重新创建;它们的值将保持不变并且对myClass的所有实例都是全局的。

+0

通过完全删除访问修饰符。例如,'private static int foo;'会变成'static int foo;'参见这个以获取更多信息:http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html –

0

除了已经发布的答案:

这取决于你所说的“限制访问静态字段”是什么:如果你想防止他人使用它们直接无意中

,使用“私人“修改器。 但请记住,如果没有其他反制措施能够实现,仍然可以通过反思访问它们。

对于“静态int foo”情况,如果你不封闭包,这也适用,因为可以很容易地将另一个类放入同一个包中,以便再次访问。

0

如果你正在建立一个API,也许你想看书Practical API Design, Confessions of a Java Framework Architect

的方法不是域更好这是更好地使用 - 通常方法getter和setters-比接入领域的直接揭露他们。

工厂比构造函数更好当您公开工厂方法而不是构造函数时,可以促进API的未来发展。

使一切都结束为了未来的发展,最好禁止子类化......让你的课程最终成为现实。

...