不同的Java包和可见性

问题描述 投票:2回答:3

我要问的问题是关于一个非常常见的话题,但是我没有找到确切的问题,所以我要明确地问它。

我正在用Java编程,我需要实现一些类,比方说A,B,C和D。它们都是SDK的一部分,只有D是公开的(对使用我的SDK的开发人员可见)。

A,B和C是处理不同主题的类(例如,蓝牙通信,Web服务使用和专有算法),尽管它们需要相互交流。我想根据包的“技能”(公共方法,蓝牙,Web服务,算法)将包中的类划分,但是如果我创建不同的包,它们将不会彼此可见。

因此,我在这里看到的唯一实现是唯一的程序包,没有修饰符(因此它们将彼此“看到”,并且用户将只能访问D类)。有什么方法可以创建不同的软件包,以便让我以更好的方式组织sdk? (想象很多类,它很容易变成一团糟:))

感谢您的帮助

乔治

java visibility packages naming
3个回答
1
投票

如果我了解您要做什么,我认为Java语言不会为您提供一种方法。

我对您的问题的理解是,“我正在开发一个API,在该API中,我只想公开某些类和/或方法;该包中的其他类和/或方法需要由所公开的类和/或方法使用,但我不需要希望将它们标记为公开,因此可供使用API​​的程序员使用。”

您不说为什么这是必要或可取的。

该语言不支持这种可见性。您可能会运行要通过混淆器隐藏的代码,以(极大地)阻止任何人理解这些方法是什么,并对其进行调用,当然也不会混淆您想要使用的方法,但这与我想的差不多与。


1
投票

我认为正确的方法是拥有一个包含通用接口和数据的包(例如枚举,简单的类(例如Point等)。)其他所有软件包都将引用此通用软件包,它们的类将在哪里实现公共接口。

这还为您带来了不同封装之间真正去耦的好处。


0
投票

您可以为您的类使用不同的包,请确保它们是公共的,以便其他包中的其他类可见。

© www.soinside.com 2019 - 2024. All rights reserved.