在扩展课程时我应该保留包名吗?

时间:2009-11-19 15:52:21

标签: java naming-conventions standards packages

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

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

或者可以/我应该将它放入我自己的包中吗? com.company.renderkits。

如果我把它放入我自己的包名中,我认为包私有变量可能会受到干扰吗?

有什么想法吗?

4 个答案:

答案 0 :(得分:4)

通常,您应该将扩展类放在自己的包中。

密码 - 私有访问级别应该由密切相关的类使用,可能由同一个开发人员编写,他们知道所有实现细节。如果扩展具有某些功能的类,则不是这种情况。

所有这一切,有些情况下你需要将你的课程放在超类的包中作为一种解决方法,但请记住,这是一个丑陋的黑客,并尽力避免它。

答案 1 :(得分:3)

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

答案 2 :(得分:1)

  

如果我把它放入我自己的包名中,我认为包私有变量可能会受到干扰吗?

这是事实,但通常扩展类不应该担心这一点。即将扩展的类本来会使用 protected 修饰符。

答案 3 :(得分:0)

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

包的目的是为每个实体提供自己唯一的名称来创建类型。

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