不同的java包&;可见度

不同的java包&;可见度,java,visibility,packages,naming,Java,Visibility,Packages,Naming,我问的问题是关于一个非常常见的话题,但我没有找到确切的问题,所以我明确地问 我在用java编程,我需要实现一些类,比如A、B、C和D。 它们都是SDK的一部分,只有D是公共的(对使用我的SDK的开发人员可见) A、 B&C是处理不同主题(比如蓝牙通信、web服务使用和专有算法)的类,尽管它们需要相互通信。 我想根据类的“技能”(公共方法、蓝牙、Web服务、算法)将类划分为包,但如果我创建不同的包,它们将彼此不可见 因此,我在这里看到的唯一实现是一个唯一的包,没有修改器(因此它们将相互“看到”,用

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

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

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

因此,我在这里看到的唯一实现是一个唯一的包,没有修改器(因此它们将相互“看到”,用户将只访问类D)。 有没有办法创建不同的软件包,让我以更好的方式组织sdk?(想象一下有很多类,很容易就会变得一团糟:))

提前谢谢你的帮助


Giorgio

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


这也为您提供了在不同包之间真正解耦的好处。

您可以为您的类使用不同的包,只需确保它们是公共的,这样它们就可以在其他包中的其他类中可见。

如果我理解您试图做什么,我认为Java语言不会给您提供这样做的方法

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

你没有说为什么这是必要的,或者是可取的


该语言不支持这种方式的可见性。你可以通过一个模糊器来运行你想隐藏的代码,以(极大地)阻止任何人理解这些方法和调用它们,当然也不要模糊你想使用的方法,但这是我能想到的最接近的方法。

我明白你的意思,我正试图在我的代码中为标准/公共对象实现这一点,但是,想象一下不同的“共享控制器”(如蓝牙管理器、身份验证管理器、协议管理器等),它们需要彼此可见,但仍然处理不同的任务区域,如何处理它们?而不是考虑使用IBlueToothmanager接口等。。这将使您的类解耦,通常被认为是一种更好的设计。您对此有具体的原因吗?如果你考虑到这一点,缺乏对世界的可见性并不会自动阻止人们使用类。你完全理解我的需求,我想向用户隐藏大部分实现的原因基本上是大部分代码被认为是“专有的”。。例如:-用于与蓝牙设备通信的协议-用于与第三方服务器通信的协议-对从上述蓝牙设备获取的数据执行的一些算法,等等。。无论如何,我完全同意你的看法。。也许一些模糊处理和/或JNI可以帮助我阻止用户获取soruce代码/算法,但这就是java提供的关于这些东西的全部内容:)