【问题标题】:Should I keep the package name when extending a class?扩展类时我应该保留包名吗?
【发布时间】:2009-11-21 18:25:38
【问题描述】:

我计划扩展一个 JSF 渲染器。包名是 oracle.adfinternal.view.faces.renderkit.rich

扩展类是否应该在相同的包结构中: oracle.adfinternal.view.faces.renderkit.rich 甚至 oracle.adfinternal.view.faces.renderkit.rich.[子包]

或者我可以/应该把它放在我自己的包裹里吗? com.company.renderkits。

我想如果我将它放入我自己的包名中可能会干扰包私有变量?

有什么想法吗?

【问题讨论】:

    标签: java naming-conventions standards packages


    【解决方案1】:

    一般来说,您应该将扩展类放在自己的包中。

    包私有访问级别应该由紧密连接的类使用,可能由知道所有实现细节的同一个开发人员编写。如果您扩展具有某些功能的类,则情况并非如此。

    话虽如此,在某些情况下您需要将您的类放在超类的包中作为一种解决方法,但请记住,这是一个丑陋的 hack,并尽量避免它。

    【讨论】:

      【解决方案2】:

      您应该将该类放入您自己的包中。不应该有任何编译/访问问题。超类已经看到了它需要看到的东西。

      【讨论】:

        【解决方案3】:

        我想如果我把它放到我自己的包名中可能会干扰包私有变量?

        这是真的,但通常扩展类不应该担心这一点。否则,要扩展的类将使用 protected 修饰符。

        【讨论】:

          【解决方案4】:

          您不应该将东西添加到其他实体(公司、个人)包中。他们可以在以后创建一个具有相同名称(当然还有相同的包)的类。他们也可以选择seal their JAR files,这会阻止您向他们的包中添加类。

          包的目的是为每个实体提供自己独特的命名空间,以在其中创建类型。

          在您的情况下,我会将包命名为:com.foobar.oracle.adfinternal.view.faces.renderkit.rich 其中“com.foobar”是您实体的反向域名(如果您没有挑一个独特的东西)。

          【讨论】:

            猜你喜欢
            • 2022-01-25
            • 1970-01-01
            • 2013-09-29
            • 1970-01-01
            • 1970-01-01
            • 2014-05-27
            • 1970-01-01
            • 1970-01-01
            • 2017-10-14
            相关资源
            最近更新 更多