【问题标题】:Different java packages & Visibility不同的java包和可见性
【发布时间】:2013-02-26 21:29:47
【问题描述】:

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

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

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

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

提前感谢您的帮助

乔治

【问题讨论】:

  • 您这样做有什么具体原因吗?如果您考虑到这一点,对世界缺乏可见性并不会自动阻止人们使用课程。

标签: java visibility packages naming


【解决方案1】:

您可以为您的类使用不同的包,只要确保它们是公开的,以便其他包中的其他类可以看到它们。

【讨论】:

    【解决方案2】:

    如果我理解您想要做什么,我认为 Java 语言没有为您提供实现它的方法。

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

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

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

    【讨论】:

    • 你完全理解了我的需求,我之所以想将大部分实现隐藏给用户,基本上是因为大部分代码都被认为是“专有的”..例如: - 用于的协议与蓝牙设备通信 - 用于与第 3 方服务器通信的协议 - 对从上述蓝牙设备获得的数据执行的一些算法等。无论如何,我完全同意你的看法.. 也许一些混淆和/或 JNI 可以帮助我阻止用户获取源代码/算法,但这就是 java 提供的关于这些东西的全部内容:)
    【解决方案3】:

    我认为正确的做法是拥有一个包含通用接口和数据的包(例如枚举、Point 等简单类......)。 所有其他包都将引用这个通用包, 他们的类将实现公共接口。

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

    【讨论】:

    • 我明白你的意思,我正在尝试在我的代码中为标准/通用对象实现这一点,但想象不同的“共享控制器”(例如蓝牙管理器、身份验证管理器、协议管理器等)。 .) 需要彼此可见但仍处理不同的任务领域,如何处理它们?
    • 不如考虑使用:IBlueToothmanager 接口等。这将使您的类解耦,通常被认为是更好的设计。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-28
    • 2020-01-22
    • 1970-01-01
    • 2016-05-31
    • 1970-01-01
    • 2017-03-18
    相关资源
    最近更新 更多