Java 重用库类时的包命名

Java 重用库类时的包命名,java,naming,Java,Naming,假设我正在使用一个库类,如library package.LibraryClass package library.package; class LibraryClass {} 我研究了它的实现,出于我的应用程序目的,我想稍微修改一下这个类,然后使用它。我的应用程序有包应用程序包 package application.package; class ApplicationClass {} 我应该如何命名该类LibraryClass应存储的包?我应该在我的项目库包中重用,还是应该使用schem

假设我正在使用一个库类,如
library package.LibraryClass

package library.package;
class LibraryClass {}
我研究了它的实现,出于我的应用程序目的,我想稍微修改一下这个类,然后使用它。我的应用程序有包
应用程序包

package application.package;
class ApplicationClass {}
我应该如何命名该类
LibraryClass
应存储的包?我应该在我的项目
库包
中重用,还是应该使用scheme
应用程序包.library包
,因为我记得我也遇到过这样的scheme

第一个

src\main\java\application\package
src\main\java\library\package
第二个

package application.package.library.package;
class LibraryClass {}

我认为这可能归结为观点,但让我们提取手头的事实:

  • 从技术角度来看,它不应该有任何区别(除非您遇到冲突,因为该库的某些其他部分希望所有类都存在于这些库包中)
  • 除此之外,您正在创建一些东西(碰巧基于某个第三方库)

由此得出:“自然”的解决方案是通过使用
应用程序.package.library.package
命名约定来表达“您是这个类的所有者”。

这取决于您希望使用什么

package my.tld.<lib-package>
我个人使用的方案如下:

tschallacka.magiccookies.util.math
tschallacka.magiccookies.util.time
tschallacka.magiccookies.graphics.model
等等

所以你有自己的“域名”
tschallacka

然后是您的项目名称。在我的例子中,
magiccookies

然后是它所属的组,这样您就可以很容易地找到相关的类。在本例中,
util
用于我的实用程序类,而
graphics
用于我的三维图形类

然后,我想通过为包中的工具类型添加特定的包来指定更多内容,
math
用于数学相关类,
time
用于日期和时间,
model
用于我的所有图形模型帮助器函数

基本上,这取决于您,以及您希望用于组织代码的任何样式

大多数编码人员都遵循一些准则/约定

命名约定

包名用小写字母书写,以避免与 类或接口的名称

公司使用他们的反向互联网域名开始他们的业务 包名称,例如,com.example.mypackage,用于名为 由程序员在example.com上创建的mypackage

需要处理单个公司内发生的名称冲突 根据该公司的惯例,可能包括该地区或 公司名称后的项目名称(例如, com.example.region.mypackage)


如果您正在拍摄一些开放源代码的“快照”以嵌入到您的项目中,那么一个常见的约定是“按原样”使用它,使用类似于:

package <lib-package>
Junit使用,但是这可能会导致问题,因为您的it本质上是一个fork,并且您绑定到一个特定的版本。如果使用以下约定,可以避免此问题

package my.tld.<lib-package>
包my.tld。
由于您看起来本质上是原始项目,我建议您使用相同的约定

而不是分叉,你应该考虑使用它,它将隔离你的bug修复、原始代码的更改和改进。