我正在开发一个基于Java ME的应用程序,希望将其提供为库。有没有办法隐藏我不想让每个人都使用但又是必需的类,以使库正常工作?
更新: 我知道我可以省略public关键字,但在不创建不同的包的情况下如何构建库本身呢?我喜欢将不同的包视为简单的不同文件夹,从而可以很好地组织代码。然而,在某些情况下,我可能需要访问其他包中的类,因此这是相当棘手的。包到底代表什么?一个想法可能是创建“接口”,但这些接口必须声明为public,这意味着外部人员也可以实现预期仅用于库内部某些过程的接口,对吗?
我正在开发一个基于Java ME的应用程序,希望将其提供为库。有没有办法隐藏我不想让每个人都使用但又是必需的类,以使库正常工作?
更新: 我知道我可以省略public关键字,但在不创建不同的包的情况下如何构建库本身呢?我喜欢将不同的包视为简单的不同文件夹,从而可以很好地组织代码。然而,在某些情况下,我可能需要访问其他包中的类,因此这是相当棘手的。包到底代表什么?一个想法可能是创建“接口”,但这些接口必须声明为public,这意味着外部人员也可以实现预期仅用于库内部某些过程的接口,对吗?
设置您的库API时,您需要保护任何不想暴露的内容。要做到这一点,只需省略访问修饰符:
class fooBar {
// do stuff here
}
这将把类访问设置为“default”,允许在同一包中以及任何子类中从中访问fooBar
。
在您的类中,您还希望通过标记它们为private
、protected
或省略修饰符来锁定任何方法和成员的访问权限,以便根据需要使它们变为“default”。
private
仅允许从包含类访问;protected
允许从同一类、包和任何子类中访问。对于您公开的任何内容(public
),如果不打算重写,将其标记为final
也是一个好习惯。
基本上,尽可能地锁定所有内容。更小的API易于使用并且更难被破坏。如果您发现未来需要公开某些内容,请在未来完成。扩展API要容易得多,而不是弃用其部分。
com.github.awvalenti.bauhinia.coronata
包中,但在不同的模块中(在IDE中显示为项目)。coronata-api
coronata-builder
coronata-demos
coronata-lib
coronata-common
:通用的Coronata库coronata-implementation-bluecove
:使用Bluecove实现的Coronata库coronata-implementation-wiiusej
:使用Wiiusej实现的Coronata库您可以将类设置为包可见
,这样只有在同一包中的其他类才能看到它们。
如果不可行,则可以使用ProGuard混淆类并隐藏其实现。
protected
修饰符,只能用于成员。限制访问类的唯一方法是省略 public
修饰符,使其仅在其包内可见。 - Muzikant让我们考虑一个例子:
如果您有一个类A,想要隐藏它,并且有一个类B,使用类A的功能,则可以这样做:
class B{
//Attribute and Methods
//Inner class A
class A{
//Methods and Attributes.
}
}
是的,有这种方法。
只需要不将这些类声明为public
即可。换句话说,不要使用public
关键字,如下所示:
class Internal { // rather than "public class Internal"
...
}
默认情况下,类只能在定义它们的包内访问。
你需要将不想公开的类设置为受保护的。这样可以使它们无法从客户端代码中使用。在官方文档中了解更多信息。
protected
修饰符,只能用于成员。限制访问类的唯一方法是省略 public
修饰符,使其仅在其包内可见。 - Muzikant