我知道您在使用2做些什么。您将类用作包,将包用作模块,以便可以将自己隔离在包中,但仍可以使用类在包中进行组织。
那非常聪明。当心聪明。
这将迫使您将多个类卡在同一个源文件中(您可能会更喜欢),并且路径中的单词将大写。
这也将迫使您在程序包中编写任何测试代码,除非您使用反射从外部侵入您的方式。
除此之外,这将起作用。看起来很奇怪。
人们更习惯内部类的使用,例如Hashtable中的EntrySet。它是私有的,所以我无法创建它,但是它实现了一个公共接口,因此我只是通过该接口与之对话并为我抢了一些东西。
但是,您在描述的类甚至是通过接口也不希望我与之交谈的。所以对我来说没有界面。这意味着我没什么好看的,也不为之困惑(除非您向我提供资料)。
我预见的最大问题是,这会使新手维护API感到困惑。您可以向他们扔文件和评论,但是当他们不阅读或不信任任何一个文件和评论时,它们不会被放大。
您已经创建了另一种弥补语言缺陷的模式。Java没有访问权限修饰符来授予对一组软件包的访问权限。我听说有人提出了“模块”访问修饰符,但没有迹象表明它正在发生。
除非您不介意我通过继承偷偷摸摸(在这种情况下受保护),否则可能会在此处使用默认的访问修饰符(无修饰符)。
Modifier Class Package Subclass World
public Y Y Y Y
protected Y Y Y N
no modifier Y Y N N
private Y N N N
您真正想要的是模块访问。这样,您可以将测试保留在一个程序包中,而将代码保留在另一个程序包中。可悲的是我们在Java中没有它。
大多数人只做1并扩展API。正确使用接口可以减轻实施的压力。
将您想要的东西破解成1甚至更难看。窥视调用堆栈并在不喜欢的程序包中调用您的内容时引发异常。哎呀